A blog post which sheds some light on two possible choices for IO: monoidal vs monadic or imperative vs recursive

4 Likes

The reason GHC/Haskell use monadic IO has more to do with laziness (that’s the reason for the unlifted types - not performance).

4 Likes

Indeed, with laziness the evaluation is guided by pattern matching, and thus recursive data structures are a good choice.