Ether is a Haskell library that extends mtl and transformers with tagged monad transformers and classes in a compatible way.