id summary reporter owner description type status priority milestone component version resolution keywords cc os architecture failure testcase blockedby blocking related differential wikipage
7558 Terrible error message when given and wanted are both insoluble simonpj simonpj "In fixing the ambiguity check I came across this tricky program
{{{
data T a b where
MkT :: (a~Maybe b) => a -> Maybe b -> T a b
f :: T a a -> Bool
f (MkT x y) = [x,y] `seq` True
}}}
We get an error message
{{{
Frozen2.hs:12:18:
Could not deduce (a ~ Maybe a)
from the context (a ~ Maybe a)
bound by a pattern with constructor
MkT :: forall a b. a ~ Maybe b => a -> Maybe b -> T a b,
in an equation for `f'
at Frozen2.hs:12:4-10
`a' is a rigid type variable bound by
the type signature for f :: T a a -> Bool at Frozen2.hs:11:6
Relevant bindings include
f :: T a a -> Bool (bound at Frozen2.hs:12:1)
x :: a (bound at Frozen2.hs:12:8)
y :: Maybe a (bound at Frozen2.hs:12:10)
In the expression: y
In the first argument of `seq', namely `[x, y]'
In the expression: [x, y] `seq` True
}}}
This error message is nonsense! It arises becuase the ""insolubles"" get both a ""given"" insoluble `(a~T a)` and a ""wanted"" insoluble with the same type.
This can also arise, rather more easily, with the new ambiguity check, via an inaccessible context
{{{
foo :: forall a. (a ~ T a) => a -> a
}}}
It's a bit obscure, but it needs fixing." bug closed normal 7.8.1 Compiler 7.6.1 fixed Unknown/Multiple Unknown/Multiple None/Unknown gadt/T7558