InstanceSigs doesn't work with ambigous types
Why this code:
{-# LANGUAGE ScopedTypeVariables, InstanceSigs, AllowAmbiguousTypes #-}
module Bug where
class Foo a
class Bar a where
bar :: forall b. (Foo b) => a
instance Bar Int where
bar :: forall b. (Foo b) => Int -- error here
bar = undefined
where
x :: b
x = undefined
is rejected with message:
Error: * Could not deduce (Foo b0)
from the context: Foo b
bound by the type signature for:
bar :: Foo b => Int
at Bug.hs:11:12-35
The type variable `b0' is ambiguous
* When checking that: forall b. Foo b => Int
is more polymorphic than: forall b. Foo b => Int
When checking that instance signature for `bar'
is more general than its signature in the class
Instance sig: forall b. Foo b => Int
Class sig: forall b. Foo b => Int
In the instance declaration for `Bar Int'
?
Where does b0 type var come from?
Trac metadata
| Trac field | Value |
|---|---|
| Version | 8.0.1 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |