deniok: (lambda cube)
Всякий знает, что монады в Хаскелле вводят как класс типов с парой функций
return :: a -> m a
(>>=) :: m a -> (a -> m b) -> m b
Некоторые также знают, что в теории категорий монады вводятся несколько по-другому. Если прямо переписать категорийное определение на Хаскелле (см. также замечание в конце текста), получим
return :: a -> m a
join ::  m (m a) -> m a
(Ну, на самом деле, return в ТК принято звать η (эта), а join - μ (мю). UPD: А [livejournal.com profile] zelych в комментариях говорит, что здесь следует упомянуть, что "монада в категориях -- это функтор + мю + эта". Следует, упоминаю.) Мы видим, что в этих двух определениях return один и тот же, а вот биндер (>>=) и join - разные. Поскольку на фундаментальном уровне оба эти подхода описывают одно и то же, биндер (>>=) и join должны выражаться друг через друга. Попробуем сделать это, руководствуясь исключительно типами.

ExpandRead more... )

Profile

deniok: (Default)
deniok

February 2022

S M T W T F S
  12345
6789101112
13141516171819
20212223 242526
2728     

Syndicate

RSS Atom

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

Expand All Cut TagsCollapse All Cut Tags
Page generated Sep. 4th, 2025 05:16 am
Powered by Dreamwidth Studios