
GHC is simply being more conservative. GHC 6.4.2 was straying too close to non-termination, as our paper shows: http://research.microsoft.com/~simonpj/papers/fd-chr Simon | -----Original Message----- | From: haskell-cafe-bounces@haskell.org [mailto:haskell-cafe- | bounces@haskell.org] On Behalf Of lists@qseep.net | Sent: 27 December 2006 00:02 | To: haskell-cafe@haskell.org | Subject: [Haskell-cafe] Coverage Condition? | | 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