[Haskell-cafe] Monad layering and DSL