new major release of transformers package

Edward Kmett ekmett at
Thu Mar 8 05:03:57 CET 2012

On Wed, Mar 7, 2012 at 7:43 PM, Ross Paterson <ross at> wrote:

> Seeking views before a new major release of transformers package.
> The docs are here:
> The source is here:
>        darcs get
> The major changes from version are:
> * Foldable and Traversable instances for transformers that support them.
> * extra Monad instances:
>        instance (MonadFix m) => MonadFix (MaybeT m)
>        instance (MonadFix m) => MonadFix (IdentityT m)
>        instance (Monad f, Monad g) => Monad (Product f g)
>        instance (MonadPlus f, MonadPlus g) => MonadPlus (Product f g)
>        instance (MonadFix f, MonadFix g) => MonadFix (Product f g)
> * new functors Backwards and Reverse
> * a new Lift transformer, a generalization of Errors
> * generalized constructor functions:
>        state :: Monad m => (s -> (a, s)) -> StateT s m a
>        reader :: Monad m => (r -> a) -> ReaderT r m a
>        writer :: Monad m => (a, w) -> WriterT w m a


If the definitions of 'modify' ran through 'state' they could avoid a round
trip through the monad.

Another issue that has been raised is: should the instance
>        instance Monad (ContT r m)
> have a Monad constraint so that it can define fail?


One of the things I liked about the recent change that brought the monad
instance for Either into Control.Monad.Instances was that we didn't go out
of our way to screw up a perfectly good monad in order to better support
fail, and the same argument could be applied to pollute Codensity, which
also currently requires nothing of 'm', but which has ContT r m-like uses
involving types like Endo. I'm not a fan of 'slippery slope' arguments, but
this strikes me as a slippery slope. ;)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the Libraries mailing list