FlexibleInstances / UndecidableInstances confusion
Consider the following code:
class Foo a
bar :: Foo a => Int
bar = 0
Compiling this code with no extensions correctly reports an error that bar
is inherently ambiguous.
However, if I enable -XUndecidableInstances
, the ambiguity error disappears, though I still cannot declare instance Foo a
. On the other hand, if I enable -XFlexibleInstances
, the ambiguity error remains, even though I can now declare instance Foo a
.
I believe that the problem is due to confusion in the note [The ambiguity check for type signatures]
in typecheck/TcMType.lhs
. That note refers to UndecidableInstances
where I believe it means FlexibleInstances
. The code immediately below (line 1378, in function checkAmbiguity
) also uses UndecidableInstances
where it would seem to want FlexibleInstances
.
I would fix this myself, but I don't feel confident enough in this wing of GHC to know this is the right change!
Trac metadata
Trac field | Value |
---|---|
Version | 7.5 |
Type | Bug |
TypeOfFailure | OtherFailure |
Priority | normal |
Resolution | Unresolved |
Component | Compiler |
Test case | |
Differential revisions | |
BlockedBy | |
Related | |
Blocking | |
CC | |
Operating system | |
Architecture |