Breaks the TyCon/types loop and the types/Id loop. \begin{code} interface TyLoop where import PreludePS(_PackedString) import PreludeStdIO ( Maybe ) import Unique ( Unique ) import FieldLabel ( FieldLabel ) import Id ( Id, GenId, StrictnessMark, mkTupleCon, mkDataCon, isNullaryDataCon, dataConArgTys, idType ) import PprType ( specMaybeTysSuffix ) import Name ( Name ) import TyCon ( TyCon ) import TyVar ( GenTyVar, TyVar ) import Type ( splitSigmaTy, splitFunTy, GenType, Type ) import Usage ( GenUsage ) import Class ( Class, GenClass ) import TysPrim ( voidTy ) data GenId ty data GenType tyvar uvar data GenTyVar uvar data GenClass tyvar uvar data GenUsage u type Type = GenType (GenTyVar (GenUsage Unique)) Unique type TyVar = GenTyVar (GenUsage Unique) type Class = GenClass (GenTyVar (GenUsage Unique)) Unique type Id = GenId (GenType (GenTyVar (GenUsage Unique)) Unique) -- Needed in TyCon mkTupleCon :: Int -> Id isNullaryDataCon :: Id -> Bool specMaybeTysSuffix :: [Maybe Type] -> _PackedString idType :: Id -> Type splitSigmaTy :: GenType t u -> ([t], [(Class,GenType t u)], GenType t u) splitFunTy :: GenType t u -> ([GenType t u], GenType t u) instance Eq (GenClass a b) -- Needed in Type dataConArgTys :: Id -> [Type] -> [Type] voidTy :: Type -- Needed in TysWiredIn data StrictnessMark = MarkedStrict | NotMarkedStrict mkDataCon :: Name -> [StrictnessMark] -> [FieldLabel] -> [TyVar] -> [(Class,Type)] -> [Type] -> TyCon -> Id \end{code}