Jak zaprojektować monadyczny stos?

Jak projektujesz i budujesz swoje monadyczne stosy? Po raz pierwszy muszę zbudować monadyczny stos (używając transformatorów), aby rozwiązać rzeczywisty problem, ale nie jestem do końca pewien, w którymzamówienie układać w stos transformatory. Jak już wiesz, tak długo, jak obliczenia są miłe* -> *, w zasadzie wszystko może odgrywać rolę wewnętrznej monady w transformatorze, a więc kilka pytań:

Czy jakiś konkretny transformator powinien znajdować się na szczycie stosu (np. ReaderT? WriterT?)Co powinno napędzać projekt? Intuicja? Typy? (np. kształt stosu zgodnie z potrzebami API)Czy każdy stos jest izomorficzny względem siebie (do pewnego stopnia) lub czy jest prawdopodobne, że jeśli zbuduję swój stos niepoprawnie, może się okazać, że nie będę mógł użyć pewnych podstawowych monad lub mieć dużego nadęty bałaganulift . lift . liftIO [...]? Moje przeczucie sugerowałoby, że jeśli transformatory wywodzą się z pewnych instancji (np. MonadReader, MonadIO itp., Podobnie jak większość transformatorów wmtl zrobić), nie powinno mieć znaczenia, w jakiej kolejności umieściłem transformatory.

Interesuje mnie słuchanie przez doświadczonych Haskellerów najlepszych praktyk lub zasad kciuka.

forever $ print "Thanks!"

ZA.

questionAnswers(2)

yourAnswerToTheQuestion