[Haskell-cafe] Coverage Condition?

lists at qseep.net lists at qseep.net
Thu Dec 28 16:02:32 EST 2006

> On Tue, Dec 26, 2006 at 07:01:52PM -0500, lists at qseep.net wrote:
>> I'm working on a program that I've been dabbling with for years. For the
>> first time, I tried to compile it with GHC 6.6, and got an error,
>> explaining that I was violating the Coverage Condition in my instance
>> declaration. The instance declaration looks like this:
>> instance MonadReader r m => MonadReader r (CPST o m) where ...
> 1. Does 'CPS' stand for Continuation Passing Style?  If so, have a look
>    at Control.Monad.Cont.ContT and eliminate your problem entirely (free
>    pre-debugged code)

Thanks, I'm aware of that module. I'm rolling my own on purpose. The
supplied ContT doesn't support 'shift', only 'callCC'. Also,  The standard
monad overly restricts the type of 'callCC', so that the captured
continuation can only be used in a single type context. My 'shift' and
'callCC' are rank-3 polymorphic, which permits them to be used in more

> 2. Your problem, is that *looking only at the instance head*, r could be
>    anything.  GHC doesn't look at the context when deciding wether an
>    instance is compatible with functional dependencies.

Yes, I think that is the problem.

> 3. http://darcs.haskell.org/packages/mtl/Control/Monad/Cont.hs
>    Looking at the standard CPS monad, there is a {-# OPTIONS_GHC -fallow-
>    undecidable-instances #-} pragma and a comment to the effect of it
>    being required for the MonadReader instance.

That's what I ended up adding to mine, as well, and it works now. Thanks.
I guess GHC is just being overly cautious.


More information about the Haskell-Cafe mailing list