
#7805: Panic: promoteType with higher-rank datatype -------------------------------+-------------------------------------------- Reporter: goldfire | Owner: Type: bug | Status: new Priority: normal | Component: Compiler Version: 7.7 | Keywords: DataKinds Os: Unknown/Multiple | Architecture: Unknown/Multiple Failure: Compile-time crash | Blockedby: Blocking: | Related: -------------------------------+-------------------------------------------- Comment(by goldfire): The following change fixes the problem and passes the {{{polykinds}}} tests: {{{ diff --git a/compiler/typecheck/TcTyDecls.lhs b/compiler/typecheck/TcTyDecls.lhs index 99ee065..690bea6 100644 --- a/compiler/typecheck/TcTyDecls.lhs +++ b/compiler/typecheck/TcTyDecls.lhs @@ -506,21 +506,21 @@ isPromotableType :: NameSet -> Type -> Bool -- Must line up with DataCon.promoteType -- But the function lives here because we must treat the -- *recursive* tycons as promotable isPromotableType rec_tcs ty = case splitForAllTys ty of - (_, rho) -> go rho + (tvs, rho) -> null tvs && go rho where go (TyConApp tc tys) | tys `lengthIs` tyConArity tc , tyConName tc `elemNameSet` rec_tcs || isJust (promotableTyCon_maybe tc) = all go tys | otherwise = False go (FunTy arg res) = go arg && go res go (AppTy arg res) = go arg && go res - go (ForAllTy _ ty) = go ty + go (ForAllTy {}) = False go (TyVarTy {}) = True go (LitTy {}) = False \end{code} }}} The change looks right to me. The change to {{{ForAllTy}}} is unnecessary to fix the original bug, but it is easy to create another test case that requires the {{{ForAllTy}}} fix. Is there a reason that the quantified variables were ignored previously? -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7805#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler