[GHC] #13988: GADT constructor with kind equality constraint quantifies unused existential type variables
GHC
ghc-devs at haskell.org
Tue Sep 5 11:21:54 UTC 2017
#13988: GADT constructor with kind equality constraint quantifies unused
existential type variables
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: patch
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.0.1
checker) |
Resolution: | Keywords: TypeInType
Operating System: Unknown/Multiple | Architecture:
Type of failure: Incorrect result | Unknown/Multiple
at runtime | Test Case:
Blocked By: | Blocking: 14131
Related Tickets: | Differential Rev(s): Phab:D3902
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by Ben Gamari <ben@…>):
In [changeset:"b9ac9e05b29c58efc93b78bf7fca43d61ead50c7/ghc" b9ac9e0/ghc]:
{{{
#!CommitTicketReference repository="ghc"
revision="b9ac9e05b29c58efc93b78bf7fca43d61ead50c7"
Fix egregious duplication of vars in RnTypes
`RnTypes` contains a fairly intricate algorithm to extract
the kind and type variables of an HsType. This algorithm carefully
maintains the separation between type variables and kind variables
so that the difference between `-XPolyKinds` and `-XTypeInType` can
be respected.
But after doing all this, `rmDupsInRdrTyVars` stupidly just
concatenated the lists of type and kind variables at the end. If a
variable were used as both a type and a kind, the algorithm would
produce *both*! This led to all kinds of problems, including #13988.
This is mostly Richard Eisenberg's patch. The only original
contribution I made was adapting call sites of `rnImplicitBndrs` to
work with the new definition of `rmDupsInRdrTyVars`. That is,
`rnImplicitBndrs` checks for variables that are illegally used in
both type and kind positions without using `-XTypeInType`, but in
order to check this, one cannot have filtered duplicate variables out
before passing them to `rnImplicitBndrs`. To accommodate for this, I
needed to concoct variations on the existing `extract-` functions in
`RnTypes` which do not remove duplicates, and use those near
`rnImplicitBndrs` call sites.
test case: ghci/scripts/T13988
Test Plan: make test TEST=T13988
Reviewers: goldfire, simonpj, austin, bgamari
Reviewed By: goldfire, simonpj
Subscribers: rwbarton, thomie
GHC Trac Issues: #13988
Differential Revision: https://phabricator.haskell.org/D3902
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13988#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list