
#11008: Difficulties around inferring exotic contexts -------------------------------------+------------------------------------- Reporter: crockeea | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.2 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by goldfire): Replying to [comment:2 crockeea]:
With the deriving clause, which instance does GHC try to create?
1. `instance (Eq (Foo r)) => Eq (Bar r)` 2. `instance (C (F r), Eq r) => Eq (Bar r)`
In either case, since I *have* a matching `Eq` instance for `Foo`, GHC should assume that I knew what I was doing when I wrote it, and just use it. This doesn't change the behavior when no matching instance is found,
Option 1. But it then tries to simplify the constraint, finding the minimal set of constraints that imply `Eq (Foo r)`. Here, minimal does not mean smallest, but instead minimal in a logical sense -- as in, the minimum set of assumptions that proves the desired constraint. So, option 1 very quickly becomes option 2. Note that if we didn't try to simplify, then you'd end up with constraints like `Eq (Maybe a)` a lot, and these would be rejected. like in your example. But you have no matching instance for `C (F r)`. So I'm not sure how GHC should recognize the difference. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11008#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler