У чым розніца паміж аператарам прывязкі і аператарам kleisli ў Haskell і чым яны звязаны?
адказ 1:
Я мяркую, што:
- 'Аператар прывязкі' - гэта манадычная прывязка: >> = 'Аператар Клейслі' - гэта склад стрэлак Клейслі (таксама вядомы як "рыба"):> =>
Па-першае, стрэлка Клейсі - гэта функцыя формы
a -> mb
На працягу некалькіх месяцаў Мы можам пакласці дзве стрэлкі гэтай формы, каб утварыць трэцюю, як у нармальнай кампазіцыі функцый (за выключэннем парадку аргументаў). Гэта аператар кампазіцыі са стрэлкамі Kleisli (таксама вядомы як "рыба"):
(> =>) :: (a -> mb) - першая стрэлка Kleisli -> (b -> mc) - другая стрэлка Kleisli -> (a -> mc)
Калі мы вызначым манады з вяртаннем і далучэннем, мы можам напісаць гэта як
(f> => g) x = далучыцца (g <$> fx)
там
(г $ fx) :: м (мк)
Дзе <$ - гэта варыянт інфіксацыі fmap. У кропкавай абазначэнні:
f> => g = далучыцца. fmap g. f
(Памятайце, што вяртанне заключае ў сабе чыстае значэнне, а аб'яднанне выдаляе ўзровень гнездавання (m (ma) -> ma).)
Аператар прывязкі прымяняе стрэлку Kleisli да манадычнага значэння:
(>> =) :: ma - манадычнае значэнне -> (a -> mb) - стрэлка Kleisli -> mb
Ён таксама можа быць вызначаны ў плане вяртання і далучэння:
mx >> = f = далучыцца (f <$> mx)
Гэтак жа і таму
(f $ mx) :: m (mb)
Мы сапраўды можам вызначыць сувязь як "рыбу" і наадварот:
mx >> = f = (const mx> => f) () (f> => g) x = fx >> = g