> On Tue, Dec 26, 2006 at 07:01:52PM -0500, [EMAIL PROTECTED] 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
contexts.

> 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.

Regards,
Lyle
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to