Free monads and monad transformers
