
#12503: Template Haskell regression: GHC erroneously thinks a type variable is also a kind -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: goldfire Type: bug | Status: new Priority: high | Milestone: 8.2.1 Component: Template Haskell | Version: 8.0.1 Resolution: | Keywords: TypeInType Operating System: Unknown/Multiple | Architecture: Type of failure: GHC rejects | Unknown/Multiple valid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by RyanGlScott): I did some cursory debugging of this tonight. Here are my findings 1. This bug was definitely introduced in 6746549772c5cc0ac66c0fce562f297f4d4b80a2. (Add kind equalities to GHC.) Not the most surprising turn of events, I know, but still nice to have confirmed. 2. The lines of code that actually produce this error are in [http://git.haskell.org/ghc.git/blob/65cc7620517abec9b3e0d9bfe644accd5f649fe5... RnTypes]: {{{#!hs extract_tv :: TypeOrKind -> Located RdrName -> FreeKiTyVars -> RnM FreeKiTyVars extract_tv t_or_k ltv@(L _ tv) acc | isRdrTyVar tv = case acc of FKTV kvs k_set tvs t_set all | isTypeLevel t_or_k -> do { when (occ `elemOccSet` k_set) $ mixedVarsErr ltv ; return (FKTV kvs k_set (ltv : tvs) (t_set `extendOccSet` occ) (ltv : all)) } | otherwise -> do { when (occ `elemOccSet` t_set) $ mixedVarsErr ltv ; return (FKTV (ltv : kvs) (k_set `extendOccSet` occ) tvs t_set (ltv : all)) } | otherwise = return acc where occ = rdrNameOcc tv }}} where `mixedVarsErr ltv` actually throws the "used as both a kind and a type" error. I decided to do some `pprTrace` debugging in this neighborhood, and I discovered that when you run the program above, the error gets thrown in the `isTypeLevel t_or_k` case. Here's some values at the moment of the error: {{{ RGS typelevel kvs : [k_a1ly] k_set : [vESeYM :-> k] tvs : [] t_set : [] all : [k_a1ly] tv : k_a1lx rdrNameOcc tv (occ) : k }}} What does this mean? I don't yet—I'll need to do some more digging. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/12503#comment:7 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler