compose-trans

Composable monad transformers

Latest on Hackage:0.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD-3-Clause licensed by Miguel Mitrofanov
Maintained by [email protected]

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 Control.Monad.Trans.

In order to make a new transformer (say, T) an instance of TransM (TransP, TransF) class, all you have to do is:

  • define instance MonadTrans T — which you've probably done already

  • define instance Monad m => Monad (T m) — also something quite common (for TransP and TransF you'd need another instance for MonadPlus and MonadFix, respectively).

  • write 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.