Hi folks,

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

The MonadReader class definition, which doesn't appear to have changed
since 6.4.2, looks like this:

class Monad m => MonadReader r m | m -> r where ...

Apparently, the Coverage Condition disallows my instance declaration,
because the variable 'r' is not mentioned in the '(CPST o m)' term. Now
this would make sense to me if I didn't have the assertion 'MonadReader r
m'. Because of that assertion, m -> r, so '(CPST o m)' shouldn't need to
explicitly mention 'r'.

I will try using -fallow-undecidable-instances, and see if the message
goes away. But can someone explain to me why this is wrong, and what would
be the preferred way to write it? I've attached the two relevant source
files. (Try compiling both files.)

Thanks,
Lyle

Attachment: CPST.hs
Description: Binary data

Attachment: CPSTInstances.hs
Description: Binary data

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

Reply via email to