The question on how to best structure functional programming applications in either Haskell or Scala is still out with various ways to achieve modularity, encapsulation and testability. In the past I have been an advocate of the `Eff` monad, based on Oleg Kiselyov’s work on “Freer monads, more extensible effects”. However, after being involved with 2 large applications (both in Scala and Haskell)