Haskell: Encoding requirements towards a monad stack and automatically lifting actions to the right place in this stack.