[project @ 1996-03-19 08:58:34 by partain]
[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 Id      ( Id, GenId, StrictnessMark, mkTupleCon, mkDataCon,
11                  getDataConSig, getInstantiatedDataConSig )
12 import PprType ( specMaybeTysSuffix )
13 import NameTypes ( FullName )
14 import TyCon   ( TyCon )
15 import TyVar   ( GenTyVar, TyVar )
16 import Type    ( GenType, Type )
17 import Usage   ( GenUsage )
18 import Class   ( Class, GenClass )
19
20 data GenId    ty
21 data GenType  tyvar uvar
22 data GenTyVar uvar
23 data GenClass tyvar uvar
24 data GenUsage u
25
26 type Type  = GenType (GenTyVar (GenUsage Unique)) Unique
27 type TyVar = GenTyVar (GenUsage Unique)
28 type Class = GenClass (GenTyVar (GenUsage Unique)) Unique
29 type Id    = GenId (GenType (GenTyVar (GenUsage Unique)) Unique)
30
31 -- Needed in TyCon
32 mkTupleCon :: Int -> Id
33 getDataConSig :: Id -> ([TyVar], [(Class, Type)], [Type], TyCon)
34 specMaybeTysSuffix :: [Maybe Type] -> _PackedString
35 instance Eq (GenClass a b)
36
37 -- Needed in Type
38 getInstantiatedDataConSig :: Id -> [Type] -> ([Type],[Type],Type)
39
40 -- Needed in TysWiredIn
41 data StrictnessMark = MarkedStrict | NotMarkedStrict
42 mkDataCon :: Unique -> FullName -> [StrictnessMark]
43           -> [TyVar] -> [(Class,Type)] -> [Type] -> TyCon
44           -> Id
45 \end{code}