An Opinionated Comparison of Software Design Approaches in Haskell | | Raw IO | Free Monads; Church Encoded Free Monads | Final Tagless / mtl | Effect Systems | ReaderT