
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