
On Mon, Aug 15, 2016 at 3:26 PM, Tom Ellis
Here's a program with an odd error message (GHC 8.0.1):
data A a = A a deriving Eq data B = B
main :: IO () main = print (A B == A B)
test/main.hs:5:15: error: • No instance for (Eq B) arising from a use of ‘==’ • In the first argument of ‘print’, namely ‘(A B == A B)’ In the expression: print (A B == A B) In an equation for ‘main’: main = print (A B == A B)
I would expect this error, since B does not implement equality. Maybe you're expecting Haskell to automatically derive an Eq B instance, but that is not the behavior I would want, since data definitions could implicitly define instances for other data types. Is there any reason why you don't define: data B = B deriving Eq?
I get an error about Eq B even though it's Eq A that is manifestly required at the call site. This error is odder when A and B are defined far away from the use of '=='.
This is even odder:
data A a = A a data B = B
instance Ord a => Eq (A a) where
main :: IO () main = print (A B == A B)
test/main.hs:7:15: error: • No instance for (Ord B) arising from a use of ‘==’ • In the first argument of ‘print’, namely ‘(A B == A B)’ In the expression: print (A B == A B) In an equation for ‘main’: main = print (A B == A B)
Now not only is the type puzzling (B instead of A) but the *class* is puzzling (Ord instead of Eq). This occurred to me in practice because 'Data.Graph.Inductive.PatriciaTree.Gr' has '(Eq a, Ord b) => Eq (Gr a b)'.
It would have been a lot more helpful to see
* No instance for (Ord B) * arising from (Eq A) * arising from the use of '=='
Does anyone agree with me that GHC should produce the full trace when it fails to resolve instances rather than just the proximal failure?
Tom _______________________________________________ Haskell-Cafe mailing list To (un)subscribe, modify options or view archives go to: http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe Only members subscribed via the mailman list are allowed to post.