Give MonadTrans a QuantifiedConstraints superclass

Baldur Blöndal baldurpet at
Wed Jun 2 06:52:47 UTC 2021

This is to advertise the proposal
( to add a
superclass to the MonadTrans type class in Control.Monad.Trans.

A Monad transformer 'trans' lifts a 'Monad m' to a 'Monad (trans m)'.

This proposal code-ifies that with a superclass constraint:

    class (forall m. Monad m => Monad (trans m)) => MonadTrans trans where

This is the main motiviating example of the Quantified Class
Constraints paper

Without it composition (·) as described in the paper can't be defined.
Uses include deriving MonadTrans via the composition of two

  type Ok :: MonadTransformer
  newtype Ok m a = Ok (Int -> Int -> m a)
    deriving (Functor, Applicative, Monad)
    via (ReaderT Int · ReaderT Int) m
     :: Type -> Type

    deriving MonadTrans
    via ReaderT Int · ReaderT Int
     :: MonadTransformer

More information about the Libraries mailing list