X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=compiler%2Ftypes%2FType.lhs;h=37f915be1dfca92944994916e3bc02fe5a1d3fae;hb=2eb04ca0f8d0ec72b417cddc60672c696b4a3daa;hp=7d42d8c190bde6853259445ae2f2c94254e7f2d9;hpb=58b05365235ae6ea3940430700a642dfe5593986;p=ghc-hetmet.git diff --git a/compiler/types/Type.lhs b/compiler/types/Type.lhs index 7d42d8c..37f915b 100644 --- a/compiler/types/Type.lhs +++ b/compiler/types/Type.lhs @@ -54,8 +54,7 @@ module Type ( applyTy, applyTys, isForAllTy, dropForAlls, -- Source types - predTypeRep, mkPredTy, mkPredTys, - tyConOrigHead, pprSourceTyCon, + predTypeRep, mkPredTy, mkPredTys, pprSourceTyCon, mkFamilyTyConApp, -- Newtypes splitRecNewType_maybe, newTyConInstRhs, @@ -604,20 +603,27 @@ predTypeRep (ClassP clas tys) = mkTyConApp (classTyCon clas) tys -- look through that too if necessary predTypeRep (EqPred ty1 ty2) = pprPanic "predTypeRep" (ppr (EqPred ty1 ty2)) --- The original head is the tycon and its variables for a vanilla tycon and it --- is the family tycon and its type indexes for a family instance. -tyConOrigHead :: TyCon -> (TyCon, [Type]) -tyConOrigHead tycon = case tyConFamInst_maybe tycon of - Nothing -> (tycon, mkTyVarTys (tyConTyVars tycon)) - Just famInst -> famInst +mkFamilyTyConApp :: TyCon -> [Type] -> Type +-- Given a family instance TyCon and its arg types, return the +-- corresponding family type. E.g. +-- data family T a +-- data instance T (Maybe b) = MkT b -- Instance tycon :RTL +-- Then +-- mkFamilyTyConApp :RTL Int = T (Maybe Int) +mkFamilyTyConApp tc tys + | Just (fam_tc, fam_tys) <- tyConFamInst_maybe tc + , let fam_subst = zipTopTvSubst (tyConTyVars tc) tys + = mkTyConApp fam_tc (substTys fam_subst fam_tys) + | otherwise + = mkTyConApp tc tys -- Pretty prints a tycon, using the family instance in case of a -- representation tycon. For example -- e.g. data T [a] = ... -- In that case we want to print `T [a]', where T is the family TyCon pprSourceTyCon tycon - | Just (repTyCon, tys) <- tyConFamInst_maybe tycon - = ppr $ repTyCon `TyConApp` tys -- can't be FunTyCon + | Just (fam_tc, tys) <- tyConFamInst_maybe tycon + = ppr $ fam_tc `TyConApp` tys -- can't be FunTyCon | otherwise = ppr tycon \end{code} @@ -645,9 +651,6 @@ splitRecNewType_maybe (TyConApp tc tys) Just (substTyWith tvs tys rep_ty) splitRecNewType_maybe other = Nothing - - - \end{code}