
#14880: GHC panic: updateRole -------------------------------------+------------------------------------- Reporter: RyanGlScott | Owner: goldfire Type: bug | Status: new Priority: normal | Milestone: 8.8.1 Component: Compiler (Type | Version: 8.2.2 checker) | Resolution: | Keywords: TypeInType Operating System: Unknown/Multiple | Architecture: Type of failure: Compile-time | Unknown/Multiple crash or panic | Test Case: Blocked By: | Blocking: Related Tickets: #15076 | Differential Rev(s): Phab:D4769, Wiki Page: | Phab:D5141 -------------------------------------+------------------------------------- Comment (by simonpj): Sigh. For a start, `closeOverKinds` stupidly goes via `FV`, which is silly in our new setup. Perhaps {{{ closeOverKinds tv_set = tv_set `unionVarSet` mapUnionVarSet kind_fvs tv_set where kind_fvs tcv = ty_co_vars_of_type (varType tv) emptyVarSet emptyVarSet }}} You might want to define {{{ tyCoVarsOfType_unclosed :: Type -> TyCoVarSet tyCoVarsOfTYpe_unclosed ty = ty_co_var_of_type emptyVarSet emptyVarSet }}} Next, I'd worry about that `mapUnionVarSet`. It seems that checking for dups, and avoiding unions, is a help. So perhaps {{{ closeOverKinds tv_set = close emptyVarSet tv_set where close :: TyCoVarSet -> TyCoVarSet -> TyCoVarSet -- (close acc tvs2) extends acc with tcvs closed over kinds -- Invariant: acc is already closed-over-kinds close acc tcvs = nonDetFoldUFM close1 acc tvs close1 :: TyCoVar -> TyCoVarSet -> TyCoVarSet close1 tcv acc = add1 (close kind_vars acc) where kind_vars = ty_co_vars_of_type (varType tcv) acc emptyVarSet add1 tvs2 | tcv `elemVarSet` tvs2 = tvs2 | otherwise = extendVarSet tvs2 tcv }}} By using the the "in-scope set" (first argument) of `ty_co_var_of_type`, I'm saying "don't bother with variables whose kind we have already closed over". And I'm trying to use `extendVarSet`, not `unionVarSet`. I'm not certain I have this right, but I think it's close. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/14880#comment:122 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler