+
+-- 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
+
+-- 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
+ | otherwise
+ = ppr tycon