[GHC] #10195: GHC forgets constraints when matching on GADTs
GHC
ghc-devs at haskell.org
Tue Mar 31 14:43:32 UTC 2015
#10195: GHC forgets constraints when matching on GADTs
-------------------------------------+-------------------------------------
Reporter: crockeea | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.4
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Comment (by goldfire):
I'm perhaps abusing the term "overlap". What I mean here is that GHC has
two routes with which to satisfy a `Bar m m'` constraint. Let's rename
variables in the global instance for clarity: `instance (BarFamily b b' ~
'True) => Bar b b'`. During type inference, GHC has to solve a `Bar p q`
constraint, for some `p` and some `q`. If, at this point during inference,
it knows `p ~ m` and `q ~ m'`, GHC will prefer the local constraint `Bar m
m'`. Otherwise, if we don't yet know enough about `p` and `q`, it will use
the global instance and then require `BarFamily p q ~ 'True`. Even if we
later learn that `p ~ m` and `q ~ m'`, it's too late to use the `Bar m m'`
constraint.
I do know that GHC "tries hard" to resolve equality constraints before
class constraints, but ''guaranteeing'' that this happens may be
impossible. So, you'll end up with situations like these.
I'd be quite curious for Simon's input here. He's on holiday at the
moment, but I'm sure he'll chime in ere too long.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10195#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list