У Хаскеллу, која је разлика између оператора веза и Клеисли оператора и како су повезани?


Одговор 1:

Претпостављам да:

  • 'Оператор везања' је монадски бинд: >> = 'Клеислијев оператор' је састав Клеисли стрелица (ака 'фисх'):> =>

Прво, Клеислијева стрелица је функција форме

а -> мб

За неке монаде м. Можемо да саставимо две стрелице овог облика да бисмо формирали трећу, попут нормалног састава функције (осим редоследа аргумената). Ово је оператер композиције стрелице Клеисли (ака 'фисх'):

(> =>) :: (а -> мб) - прва стрелица Клеисли -> (б -> мц) - друга стрелица Клеисли -> (а -> мц)

Ако одлучимо да дефинирамо монаде са повратком и спајањем, онда то можемо написати као

(ф> => г) к = придружи се (г <$> фк)

јер

(г <$> фк) :: м (мц)

Где је <$> инфик варијанта фмап-а. У тачки без тачке:

ф> => г = придружи се. фмап г. ф

(Подсетимо се да повратак прекрива чисту вредност и придруживање уклања један ниво гнездења (м (ма) -> ма).)

Оператор повезивања примењује Клеисли стрелицу на монадичку вредност:

(>> =) :: ма - монадска вредност -> (а -> мб) - Клеислијева стрелица -> мб

Такође се може дефинисати у смислу повратка и придруживања:

мк >> = ф = придружи се (ф <$> мк)

Слично томе, јер

(ф <$> мк) :: м (мб)

Можемо, у ствари, дефинисати везивање у смислу 'рибе' и обрнуто:

мк >> = ф = (цонст мк> => ф) () (ф> => г) к = фк >> = г