Associated data type doesn't infer context
The following code fails to compile:
class Eq a => Bar a where
bar :: a -> Int
class Bar (Baz a) => Foo a where
data Baz a :: *
foo :: Baz a -> Baz a
data Bang a = Bang (Baz a) deriving Eq
The error message is
test.hs:8:36:
No instance for (Eq (Baz a))
arising from the 'deriving' clause of a data type declaration
at test.hs:8:36-37
Possible fix: add an instance declaration for (Eq (Baz a))
When deriving the instance for (Eq (Bang a))
If I add a context of Foo a to Bang, it compiles, but since Baz is only defined on instances of Foo, shouldn't GHC be able to figure out that Baz a always has an Eq instance?
In any case, the error message is misleading, since there already is a context for Baz a
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.8.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |