[project @ 1998-01-08 14:40:22 by areid]
[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, splitRhoTy, applyTy, 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 splitRhoTy   :: GenType t u -> ([(Class,GenType t u)], GenType t u)
42 applyTy :: Type -> Type -> Type
43 splitFunTy   :: GenType t u -> ([GenType t u], GenType t u)
44 instance Eq (GenClass a b)
45
46 -- Needed in Type
47 tupleTyCon :: Int -> TyCon
48 dataConArgTys :: Id -> [Type] -> [Type]
49 voidTy :: Type
50
51 -- Needed in TysWiredIn
52 data StrictnessMark = MarkedStrict | NotMarkedStrict
53 mkDataCon :: Name -> [StrictnessMark] -> [FieldLabel]
54           -> [TyVar] -> [(Class,Type)] -> [TyVar] -> [(Class,Type)] -> [Type] -> TyCon
55           -> Id
56 mkTupleCon ::  Int -> Name -> Type -> Id
57 \end{code}