1086dec90e184ae590ed49fa39b30f21bec16430
[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, mkDataCon, mkTupleCon,
12                  isNullaryDataCon, dataConArgTys, idType )
13 import TysWiredIn ( tupleCon, tupleTyCon )
14 import PprType ( specMaybeTysSuffix )
15 import Name    ( Name )
16 import TyCon   ( TyCon )
17 import TyVar   ( GenTyVar, TyVar )
18 import Type    ( splitSigmaTy, splitFunTy, GenType, Type )
19 import Usage   ( GenUsage )
20 import Class   ( Class, GenClass )
21 import TysPrim ( voidTy )
22
23 data GenId    ty
24 data GenType  tyvar uvar
25 data GenTyVar uvar
26 data GenClass tyvar uvar
27 data GenUsage u
28
29 type Type  = GenType (GenTyVar (GenUsage Unique)) Unique
30 type TyVar = GenTyVar (GenUsage Unique)
31 type Class = GenClass (GenTyVar (GenUsage Unique)) Unique
32 type Id    = GenId (GenType (GenTyVar (GenUsage Unique)) Unique)
33
34 -- Needed in TyCon
35 tupleCon :: Int -> Id
36 isNullaryDataCon :: Id -> Bool
37 specMaybeTysSuffix :: [Maybe Type] -> _PackedString
38 idType :: Id -> Type
39 splitSigmaTy :: GenType t u -> ([t], [(Class,GenType t u)], GenType t u)
40 splitFunTy   :: GenType t u -> ([GenType t u], GenType t u)
41 instance Eq (GenClass a b)
42
43 -- Needed in Type
44 tupleTyCon :: Int -> TyCon
45 dataConArgTys :: Id -> [Type] -> [Type]
46 voidTy :: Type
47
48 -- Needed in TysWiredIn
49 data StrictnessMark = MarkedStrict | NotMarkedStrict
50 mkDataCon :: Name -> [StrictnessMark] -> [FieldLabel]
51           -> [TyVar] -> [(Class,Type)] -> [Type] -> TyCon
52           -> Id
53 mkTupleCon ::  Int -> Name -> Type -> Id
54 \end{code}