Я новичок в Haskell, и я думаю, что понимаю монады и их механики (по крайней мере, для списка, штата, может быть, писателей и читателей), но я хочу понять, почему они были определены так, как они, или почему они должны быть такими, какие они есть, чтобы помочь моей интуиции в размышлении о них.
В частности, что такое чтение, которое делает монады-читатели или государственные монады необходимыми функциями (т.е. \s -> (a,s)
), а не только такими данными, как монада-писатель (т.е. (w,a)
)?
Кроме того, может ли монада писателя использоваться в качестве государственной монады, где журнал используется как строковое представление состояния, если функциональность MonadPlus
не используется? Является ли монадическая функция, используемая с монадами-писателями, разрешенной для просмотра текущего журнала и изменения, если это необходимо, или это только функция связывания монады-писателя, которая разрешена для просмотра журнала?
Кроме того, почему монады определены в терминах монадических функций, которые с типом a -> m b
, а не с типом m a -> mb
? Что так естественно в отношении функции, идущей от базового типа к монадированному типу?
Спасибо за ваши ответы.