Большинство руководств, кажется, дают много примеров монад (ввод-вывод, состояние, список и т.д.), а затем ожидают, что читатель сможет абстрагироваться от общего принципа, а затем упоминается теория категорий. Я не склонен хорошо учиться, пытаясь обобщить на примерах, и я хотел бы понять с теоретической точки зрения, почему этот паттерн так важен.
Судя по этой теме:
Кажется, что в большинстве руководств приводится множество примеров монад (ввод-вывод, состояние, список и т. Д.), А затем ожидается, что читатель сможет абстрагироваться от общего принципа, а затем упоминается теория категорий. Я не склонен хорошо учиться, пытаясь обобщить на примерах, и я хотел бы понять с теоретической точки зрения, почему этот паттерн так важен.
Судя по этой теме:
Большинство руководств, кажется, дают много примеров монад (ввод-вывод, состояние, список и т. Д.), А затем ожидают, что читатель сможет абстрагироваться от общего принципа, а затем упоминается теория категорий. Я не склонен хорошо учиться, пытаясь обобщить на примерах, и я хотел бы понять с теоретической точки зрения, почему этот паттерн так важен.
Судя по этой теме: Кто-нибудь может объяснить Монады? это обычная проблема, и я попытался просмотреть большинство предлагаемых руководств (кроме видеороликов Брайана Бека, которые не воспроизводятся на моей Linux-машине):
Кто-нибудь знает об учебнике, который начинается с теории категорий и объясняет в этих терминах IO, состояние, список монад? вот моя неудачная попытка сделать это:
Насколько я понимаю, монада состоит из тройки: эндофунктора и двух естественных преобразований.
Функтор обычно отображается с типом: (а -> б) -> (ма -> мб) Я включил вторую скобку, чтобы подчеркнуть симметрию.
Но это эндофунктор, поэтому разве домен и кодомен не должны быть такими же, как это?:
(a -> b) -> (a - > б)
Думаю, ответ состоит в том, что и домен, и кодомен имеют тип:
(a -> b) | (ma -> mb) | (mma -> mmb) и так далее ...
Но я не совсем уверен, работает ли это или согласуется с данным определением функтора?
Когда мы переходим к естественному преобразованию, оно становится равным хуже. Если я правильно понимаю, естественное преобразование - это функтор второго порядка (с определенными правилами), который является функтором от одного функтора к другому. Итак, поскольку мы определили функтор выше, общий тип естественных преобразований будет следующим: ((a -> b) -> (ma -> mb)) -> ((a -> b) -> (ma -> mb))
Но фактические естественные преобразования, которые мы используем, имеют тип:
a -> ma
ma -> (a -> mb) -> mb
Являются ли эти подмножества общей формы выше? и почему они являются естественными преобразованиями?
Мартин