Skip to content

Coverage Condition cannot be turned off

Compile this program

{-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-}
module Bug1 where

class C a b | a -> b

data A a = A
data B a = B

instance C (A a) (B b)

and observe the error message

Bug1.hs:9:10:
    Illegal instance declaration for `C (A a) (B b)'
      The coverage condition fails in class `C'
        for functional dependency: `a -> b'
      Reason: lhs type `A a' does not determine rhs type `B b'
    In the instance declaration for `C (A a) (B b)'

Then read manual, sec 7.6.3.3:

Both the Paterson Conditions and the Coverage Condition are lifted if you give the -XUndecidableInstances flag

Compile again with -XUndecidableInstances. Observe the exact same error message.

Either the compiler or the documentation is wrong. I certainly hope it is the compiler, because it worked in 7.6 and was quite useful.

Trac metadata
Trac field Value
Version 7.8.2
Type Bug
TypeOfFailure OtherFailure
Priority normal
Resolution Unresolved
Component Compiler
Test case
Differential revisions
BlockedBy
Related
Blocking
CC
Operating system
Architecture
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information