[Haskell] MTL violates coverage condition?
Tom.Schrijvers at cs.kuleuven.be
Tue Nov 20 04:49:05 EST 2007
> Does 'MonadState s m => MonadState s (ReaderT r m)', found in
> Control.Monad.Reader violate the coverage condition as I believe it
Yes, it does.
> Can one write a function using this library to force the type
> inference engine to loop indefinitely? If not, what mitigating
> conditions prevent it? Can I write a similar declaration in my
> library and compile it with -fallow-undecidable-instances and without
The coverage condition is a sufficient condition for termination of the
Another sufficient condition is the Terminating Weak Coverage condition
(Definition 14). This condition is met by that instance, as well as yours.
If you want to get non-terminating, you must write a funny instance like:
MonadState s m => MonadState (MymonadT s) (MymonadT m)
and then set up a constraint
MonadState x (MymonadT x)
I did not try it, but GHC should run out of stack on this one or give up.
I'm currently working with Martin Sulzmann on a relaxed set of
conditions for FDs and type functions.
Department of Computer Science
tel: +32 16 327544
e-mail: tom.schrijvers at cs.kuleuven.be
More information about the Haskell