Нашел любопытнейшую статью, где пишут, что монады можно заменить акторами. Акторы имеют те же самые свойства, что и монады, но при этом не такие сложные и уродливые. Цитата:
You can write an actor in a purely functional language, and have it send messages to file systems, databases or any other other stateful actor. Because the messages are sent asynchronously, you never see the answer in the same activation (aka turn) of the actor, so the fact that these actors are stateful and may give different answers to the same question at different times does not stain your precious snow white referential transparency with its vulgar impurity. This is pretty much what you do with a monad as well - you bury the stateful filth in a well marked shallow grave and whistle past it.
полностью тут:
http://gbracha.blogspot.ru/2011/01/maybe-monads-might-not-matter.html
очень интересная статья.