Il IO
monad in Haskell viene spesso spiegato come una monade di stato in cui lo stato è il mondo. Quindi un valore di tipo IO a
monad viene visualizzato come qualcosa come worldState -> (a, worldState)
.
Qualche tempo fa ho letto un articolo (o un post di un blog / mailing list) che ha criticato questo punto di vista e fornito diversi motivi per cui non è corretto. Ma non riesco a ricordare né l'articolo né i motivi. Qualcuno sa?
Modifica: L'articolo sembra perso, quindi iniziamo a raccogliere vari argomenti qui. Sto iniziando una taglia per rendere le cose più interessanti.
Modifica: L'articolo che stavo cercando è Affrontare la squadra scomoda: input / output monadico, concorrenza, eccezioni e chiamate in lingua straniera in Haskell di Simon Peyton Jones. (Grazie alla risposta di TacTics.)