La mónada IO
en Haskell a menudo se explica como una mónada estatal donde el estado es el mundo. Por lo tanto, un valor del tipo IO a
monad se ve como algo así como worldState -> (a, worldState)
.
Hace algún tiempo leí un artículo (o un blog / publicación de la lista de correo) que criticó esta opinión y dio varias razones por las que no es correcto. Pero no puedo recordar ni el artículo ni las razones. Alguien sabe?
Editar: El artículo parece perdido, así que comencemos a recopilar varios argumentos aquí. Estoy empezando una recompensa para hacer las cosas más interesantes.
Edit: El artículo que estaba buscando es Enfrentando al equipo incómodo: entrada / salida monádica, concurrencia, excepciones y llamadas a idiomas extranjeros en Haskell por Simon Peyton Jones. (Gracias a la respuesta de TacTics.)