Como projetar uma pilha monádica?

Como você projeta e constrói suas pilhas monádicas? Pela primeira vez eu preciso construir uma pilha monádica (usando transformadores) para resolver um problema do mundo real, mas não tenho certeza absolutaordem empilhar os transformadores. Como você já sabe, desde que um cálculo tenha tipo* -> *basicamente, qualquer coisa pode desempenhar o papel da mônada interior em um transformador, portanto, um par de perguntas:

Algum transformador em particular deve estar no topo da pilha (por exemplo, ReaderT? WriterT?)O que deve impulsionar o design? Intuição? Tipos (por exemplo, forma a pilha de acordo com as necessidades da sua API)Cada pilha é isomórfica entre si (até certo ponto) ou é provável que, se eu construir minha pilha incorretamente, eu possa acabar não sendo capaz de usar certas mônadas subjacentes ou ter uma grande bagunçalift . lift . liftIO [...]? Meu instinto sugeriria que, se os transformadores deriva algumas instâncias (por exemplo, MonadReader, MonadIO, etc, como a maioria dos transformadores emmtl fazer), não importa em que ordem eu coloquei os transformadores.

Tenho interesse em ouvir de Haskellers experientes sobre as melhores práticas ou regras práticas.

forever $ print "Thanks!"

UMA.

questionAnswers(2)

yourAnswerToTheQuestion