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