A version of monad transformers that (a) allows one to convince the type checker that transformer application is a monad, and (b) doesn't need lots of boilerplate to add a new transformer. It's supposed to play nicely with
In order to make a new transformer (say,
T) an instance of
TransF) class, all you have to do is:
instance MonadTrans T— which you've probably done already
instance Monad m => Monad (T m)— also something quite common (for
TransFyou'd need another instance for
instance Trans T where transMInst = instM— which is exactly one line of boilerplate. Sorry about that.
After that, you can use your new and shiny transformer in compositions, like
ReaderT Char :. T :. WriterT String — and such a composition would automagically become a monad transformer.