Большинство учебных пособий, как представляется, дают много примеров монадов (IO, состояние, список и т.д.), а затем ожидают, что читатель сможет абстрагироваться от общего принципа, а затем упомянуть теорию категорий. Я не очень хорошо учился, пытаясь обобщить из примеров, и я хотел бы с теоретической точки зрения понять, почему этот шаблон так важен.
Судя по этой теме: Кто-нибудь может объяснить Монады? это обычная проблема, и я попытался взглянуть на большинство предлагаемых советов (кроме видео Brian Beck, которые не будут воспроизводиться на моей машине Linux):
Кто-нибудь знает учебник, который начинается с теории категорий и объясняет IO, состояние, список монадов в этих терминах? следующая моя неудачная попытка сделать это:
Как я понимаю, монада состоит из тройки: эндо-функтора и двух естественных преобразований.
Функтор обычно отображается с типом: (a → b) → (m a → m b) Я включил вторую скобку, чтобы подчеркнуть симметрию.
Но это endofunctor, поэтому домен и кодомен не должны быть такими же?:
(a → b) → (a → b)
Я думаю, что ответ заключается в том, что домен и codomain имеют тип:
(a → b) | (m a → m b) | (m m a → m m b) и т.д....
Но я не уверен, что это работает или вписывается в определение данного функтора?
Когда мы переходим к естественному преобразованию, он становится еще хуже. Если я правильно понимаю, естественное преобразование является функтором второго порядка (с определенными правилами), являющимся функтором от одного функтора к другому. Итак, поскольку мы определили функтор над общим типом естественных преобразований, получим: ((a → b) → (m a → m b)) → ((a → b) → (m a → m b))
Но фактические естественные преобразования, которые мы используем, имеют тип:
a → m a
m a → (a → m b) → m b
Являются ли эти подмножества общего вида выше? и почему они являются естественными преобразованиями?
Martin