I’ve written 60,000+ lines of Haskell, some of which are fairly I/O heavy with low-level FFI, raw and unsafe pointer manipulation, etc. I/O heavy code looks just like any other imperative language: you do this, perhaps extract a result, then do that.
In contrast in pure code people have more tendency to get into monad acrobatics, but excessive monad acrobatics is just code smell.
In contrast in pure code people have more tendency to get into monad acrobatics, but excessive monad acrobatics is just code smell.