## Typeclass resolution errors quite puzzling

This ticket is based on a post I made to haskell-cafe: https://mail.haskell.org/pipermail/haskell-cafe/2016-August/124622.html

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 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?