Deriving for indexed data types
[ghc-hetmet.git] / compiler / types / Type.lhs
index 480357e..cdc54a1 100644 (file)
@@ -55,6 +55,7 @@ module Type (
 
        -- Source types
        predTypeRep, mkPredTy, mkPredTys,
+       tyConOrigHead,
 
        -- Newtypes
        splitRecNewType_maybe, newTyConInstRhs,
@@ -602,6 +603,13 @@ predTypeRep (ClassP clas tys) = mkTyConApp (classTyCon clas) tys
        -- Result might be a newtype application, but the consumer will
        -- 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
 \end{code}