Как спроектировать монадический стек?

Как вы проектируете и строите свои монадические стеки? Впервые мне нужно собрать монадический стек (с использованием преобразователей), чтобы решить реальную проблему, но яЯ не совсем уверен, в которомпорядок сложить трансформаторы. Как вы уже знаете, пока вычисления имеют вид* -> *в принципе, все может играть роль внутренней монады в преобразователе, таким образом, пара вопросов:

Должен ли какой-то конкретный преобразователь быть на вершине стека (например, ReaderT? WriterT?)Что должно управлять дизайном? Интуиция? Типы? (например, сформировать стек в соответствии с вашим API 'нужды)Является ли каждый стек изоморфным друг другу (в определенной степени) или вполне вероятно, что, если я соберу свой стек неправильно, я могу оказаться не в состоянии использовать определенные базовые монады или иметь большой раздутый беспорядокlift . lift . liftIO [...]? Мои интуитивные ощущения подсказывают, что если преобразователи получают некоторые экземпляры (например, MonadReader, MonadIO и т. Д., Как и большинство преобразователей вmtl делать), это не должноВ каком порядке я поставил трансформаторы.

Мне интересно услышать от опытных Haskellers о лучших практиках или практических правилах.

forever $ print "Thanks!"

A.

Ответы на вопрос(2)

Ваш ответ на вопрос