9fb866fcad27ec5c9039bb20e2b609391346c6af
[ghc-hetmet.git] / ghc / compiler / types / TyLoop.lhi
1 Breaks the TyCon/types loop and the types/Id loop.
2
3 \begin{code}
4 interface TyLoop where
5
6 import PreludePS(_PackedString)
7 import PreludeStdIO ( Maybe )
8 import Unique ( Unique )
9
10 import FieldLabel ( FieldLabel )
11 import Id      ( Id, GenId, StrictnessMark, mkTupleCon, mkDataCon,
12                  isNullaryDataCon, dataConArgTys )
13 import PprType ( specMaybeTysSuffix )
14 import Name    ( Name )
15 import TyCon   ( TyCon )
16 import TyVar   ( GenTyVar, TyVar )
17 import Type    ( GenType, Type )
18 import Usage   ( GenUsage )
19 import Class   ( Class, GenClass )
20 import TysPrim ( voidTy )
21
22 data GenId    ty
23 data GenType  tyvar uvar
24 data GenTyVar uvar
25 data GenClass tyvar uvar
26 data GenUsage u
27
28 type Type  = GenType (GenTyVar (GenUsage Unique)) Unique
29 type TyVar = GenTyVar (GenUsage Unique)
30 type Class = GenClass (GenTyVar (GenUsage Unique)) Unique
31 type Id    = GenId (GenType (GenTyVar (GenUsage Unique)) Unique)
32
33 -- Needed in TyCon
34 mkTupleCon :: Int -> Id
35 isNullaryDataCon :: Id -> Bool
36 specMaybeTysSuffix :: [Maybe Type] -> _PackedString
37 instance Eq (GenClass a b)
38
39 -- Needed in Type
40 dataConArgTys :: Id -> [Type] -> [Type]
41 voidTy :: Type
42
43 -- Needed in TysWiredIn
44 data StrictnessMark = MarkedStrict | NotMarkedStrict
45 mkDataCon :: Name -> [StrictnessMark] -> [FieldLabel]
46           -> [TyVar] -> [(Class,Type)] -> [Type] -> TyCon
47           -> Id
48 \end{code}