[Haskell-cafe] Coverage Condition?

Simon Peyton-Jones simonpj at microsoft.com
Fri Dec 29 04:53:21 EST 2006

GHC is simply being more conservative.  GHC 6.4.2 was straying too close to non-termination, as our paper shows:


| -----Original Message-----
| From: haskell-cafe-bounces at haskell.org [mailto:haskell-cafe-
| bounces at haskell.org] On Behalf Of lists at qseep.net
| Sent: 27 December 2006 00:02
| To: haskell-cafe at 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

More information about the Haskell-Cafe mailing list