Fix the coverage checker's treatment of existential tyvars
authorRyan Scott <ryan.gl.scott@gmail.com>
Fri, 2 Mar 2018 21:18:04 +0000 (16:18 -0500)
committerBen Gamari <ben@smart-cactus.org>
Fri, 2 Mar 2018 21:53:41 +0000 (16:53 -0500)
commita2d03c69b782212e6c476cfc1870bae493a4ac89
tree1ccc60c3e4b7e00c6c2d74736070362c3fede2b0
parent821daadf65a3e146f8adf2802b3cb8b520d8d10e
Fix the coverage checker's treatment of existential tyvars

Previously, the pattern-match coverage checker was far too
eager to freshen the names of existentially quantified type
variables, which led to incorrect sets of type constraints that
misled GHC into thinking that certain programs that involve nested
GADT pattern matches were non-exhaustive (when in fact they were).
Now, we generate extra equality constraints in the ConCon case of
the coverage algorithm to ensure that these fresh tyvars align
with existing existential tyvars. See
`Note [Coverage checking and existential tyvars]` for the full story.

Test Plan: make test TEST="T11984 T14098"

Reviewers: gkaracha, bgamari, simonpj

Reviewed By: simonpj

Subscribers: simonpj, rwbarton, thomie, carter

GHC Trac Issues: #11984, #14098

Differential Revision: https://phabricator.haskell.org/D4434
compiler/deSugar/Check.hs
testsuite/tests/pmcheck/should_compile/T11984.hs [new file with mode: 0644]
testsuite/tests/pmcheck/should_compile/T14098.hs [new file with mode: 0644]
testsuite/tests/pmcheck/should_compile/all.T