+repType (ForAllTy _ ty) = repType ty
+repType (TyConApp tc tys)
+ | isNewTyCon tc = -- Recursive newtypes are opaque to coreView
+ -- but we must expand them here. Sure to
+ -- be saturated because repType is only applied
+ -- to types of kind *
+ ASSERT( isRecursiveTyCon tc &&
+ tys `lengthIs` tyConArity tc )
+ repType (new_type_rep tc tys)
+repType ty = ty
+
+-- new_type_rep doesn't ask any questions:
+-- it just expands newtype, whether recursive or not
+new_type_rep new_tycon tys = ASSERT( tys `lengthIs` tyConArity new_tycon )
+ case newTyConRep new_tycon of
+ (tvs, rep_ty) -> substTyWith tvs tys rep_ty