Hal
I don't quite understand the intuitions behind your program, but the
bug is easy enough:
| instance (Eq e, Foo p) => Foo (Wrap p) where
| foo (Bar p) e q = foo p e q
This instance declaration is guaranteed to give problems if it is
ever used, and GHC should probably bleat about it. Suppose
you have the constraint
Foo (Wrap T)
where T is some type. Using the instance declaration we can simplify
this to the constraints
Eq e
Foo T
where e is a fresh type variable. But we are never going to learn any
thing more about 'e', and so it is correctly reported as ambiguous.
It's
like writing
reverse :: Eq x => [a] -> [a]
Any call to this 'reverse' will give a constraint (Eq x) that is
ambiguous.
Really, GHC should reject the instance declaration.
Simon
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell