I’ve got a lot of respect for Haskell, but this seems like a truly complicated way to solve a simple problem.
Never mind that as soon as you want to add some tuning parameter to your config file, you’re going to need to either thread an effect type through your entire program or perform some other equally non-trivial refactor. Double nevermind having to compose monads with a transformer stack.
At least Idris offers the bang! effect notation (which probably requires strictness to be sane) built on extensible effects. Haskell version of the Eff type here: http://www.cs.indiana.edu/~sabry/papers/exteff.pdf - That’ll at least alleviate the monad transformer stack madness.
yeah, i think this is also a really bad example; it seems infinitely nicer to not pass a big amount of state to various functions, but simply the little bits and pieces that each small function needs in order to do its work (in this case).
Forgive me, I didn’t read the article but I have used extensible-effects in Haskell and I highly recommend it.