A IO
mônada em Haskell é frequentemente explicada como uma mônada estadual, onde o estado é o mundo. Portanto, um valor do tipo IO a
monad é visto como algo parecido worldState -> (a, worldState)
.
Algum tempo atrás, li um artigo (ou um post na lista de emails / blogs) que criticou essa visão e deu várias razões pelas quais ela não está correta. Mas não me lembro nem do artigo nem das razões. Alguém sabe?
Edit: O artigo parece perdido, então vamos começar a reunir vários argumentos aqui. Estou começando uma recompensa para tornar as coisas mais interessantes.
Edit: O artigo que eu estava procurando é Abordar o esquadrão estranho: entrada / saída monádica, simultaneidade, exceções e chamadas em idioma estrangeiro em Haskell por Simon Peyton Jones. (Graças à resposta do TacTics.)