-- Source types
predTypeRep, mkPredTy, mkPredTys,
+ tyConOrigHead,
-- Newtypes
splitRecNewType_maybe, newTyConInstRhs,
-- 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}