Give MonadTrans a QuantifiedConstraints superclass

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


This is to advertise the proposal
(https://gitlab.haskell.org/ghc/ghc/-/issues/19922) 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 https://gkaracha.github.io/papers/quantcs.pdf

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

  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