
#11648: assertPprPanic, called at compiler/types/TyCoRep.hs:1932 -------------------------------------+------------------------------------- Reporter: thomie | Owner: goldfire Type: bug | Status: merge Priority: highest | Milestone: 8.0.1 Component: Compiler | Version: 8.1 Resolution: | Keywords: TypeInType Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: | polykinds/T11648{,b} Blocked By: | Blocking: Related Tickets: | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by goldfire): A few comments for posterity on the commit above: A lot of the changes are due to moving decisions out from kcHsTyVarBndrs, and thus the need to store information in the AST: - It turned out to be more convenient to decide if a data decl has a CUSK in the renamed than on the fly. (It could be done on the fly, but it would have been a bit hairy and duplicated code in the renamer.) See the new bit in the manual for a description of what's going on here. - There also needed to be a decision about whether to use `Anon` or `Named` when building the `TcTyBinder`s of a tycon's kind. Previous to this patch, this was done in `kcHsTyVarBndrs`, but -- as Simon pointed out to me -- this was bogus (it looked at the free variables of a not-yet- solved-or-zonked type). So it's now done via a simple syntactic check in the renamer. But then the result of the check must be put in the AST, causing knock-on changes. See `Note [Dependent LHsQTyVars]` in !TcHsType and also a new bit in the manual. - One of this issues brought up in the ticket is the handling of CUSKs for associated type families. An associated type/data family's CUSKness must be inherited from the enclosing class. Previously, all associated families had CUSKs, but this was wrong. So the CUSK check is a bit more intricate to allow for this relationship. - Along the way, I made `(->)`, when used in a kind, have type `* -> * -> *`, instead of being polymorphic in `RuntimeRep`s. We don't have type- level representation polymorphism. - Also incidental to this patch, I made kind variables have kind `*` when `-XTypeInType` is not in effect. Not doing this earlier was an oversight. The check isn't perfect, as it's sometimes hard to tell what's a kind variable and what isn't; currently, only variables used in kinds in tycon `LHsQTyVars` are affected, and these are surely kind variables. (This is `mk_kv_kinds` in `kcHsTyVarBndrs`.) - There is a new function `anonymiseTyBinders`. This was necessary in an earlier version of this patch but is now redundant (and harmless). I will remove. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/11648#comment:22 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler