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 должны выражаться друг через друга. Попробуем сделать это, руководствуясь исключительно типами.

Read 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

No cut tags
Page generated Apr. 23rd, 2025 12:29 pm
Powered by Dreamwidth Studios