{-# LANGUAGE QuantifiedConstraints #-} module Foo where import Control.Monad.Writer data Foo = Foo foo :: (forall e. Monoid e => MonadWriter e (m e)) => m [Foo] Int foo = pure 1