[GHC] #13988: GADT constructor with kind equality constraint quantifies unused existential type variables
GHC
ghc-devs at haskell.org
Mon Jul 17 02:02:07 UTC 2017
#13988: GADT constructor with kind equality constraint quantifies unused
existential type variables
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 8.0.1
(Type checker) |
Keywords: TypeInType | Operating System: Unknown/Multiple
Architecture: | Type of failure: Incorrect result
Unknown/Multiple | at runtime
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
Reproducible with GHC 8.0.1., 8.0.2, 8.2.1, or HEAD (but I'll use GHC
8.2.1 to show the results of `:type +v`):
{{{
$ /opt/ghc/8.2.1/bin/ghci
GHCi, version 8.2.0.20170704: http://www.haskell.org/ghc/ :? for help
Loaded GHCi configuration from /home/rgscott/.ghci
λ> :set -XTypeInType -XGADTs -fprint-explicit-foralls
λ> import Data.Kind
λ> data Foo (a :: k) where MkFoo :: (k ~ Type) => Foo (a :: k)
λ> :type +v MkFoo
MkFoo :: forall k1 (a :: k1) k2 (k3 :: k2). k1 ~ * => Foo a
}}}
Note that `MkFoo` quantifies two extra existential type variables, `k2`
and `k3` which are completely unused!
Note that this does not occur if the `MkFoo` constructor uses an explicit
`forall`:
{{{
λ> :set -XScopedTypeVariables
λ> data Foo (a :: k) where MkFoo :: forall k (a :: k). (k ~ Type) => Foo
(a :: k)
λ> :type +v MkFoo
MkFoo :: forall k (a :: k). k ~ * => Foo a
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13988>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list