[Haskell-beginners] Is complete decoupling and abstraction possible in Haskell?