b2f07e4d302db73af52aa1baaf198371b0a6da7a
[ghc-hetmet.git] / ghc / compiler / utils / Ubiq.lhi
1 Things which are ubiquitous in the GHC compiler.
2
3 \begin{code}
4 interface Ubiq where
5
6 import PreludePS(_PackedString)
7
8 import Bag              ( Bag )
9 import BinderInfo       ( BinderInfo )
10 import CgBindery        ( CgIdInfo )
11 import CharSeq          ( CSeq )
12 import CLabel           ( CLabel )
13 import Class            ( GenClass, GenClassOp, Class(..), ClassOp )
14 import ClosureInfo      ( ClosureInfo, LambdaFormInfo )
15 import CmdLineOpts      ( SimplifierSwitch, SwitchResult )
16 import CoreSyn          ( GenCoreArg, GenCoreBinder, GenCoreBinding, GenCoreExpr,
17                           GenCoreCaseAlts, GenCoreCaseDefault, Coercion
18                         )
19 import CoreUnfold       ( UnfoldingDetails, UnfoldingGuidance )
20 import CostCentre       ( CostCentre )
21 import FieldLabel       ( FieldLabel )
22 import FiniteMap        ( FiniteMap )
23 import HeapOffs         ( HeapOffset )
24 import HsCore           ( UnfoldingCoreExpr )
25 import HsPat            ( OutPat )
26 import HsPragmas        ( ClassOpPragmas, ClassPragmas, DataPragmas, GenPragmas, InstancePragmas )
27 import Id               ( StrictnessMark, GenId, Id(..) )
28 import IdInfo           ( IdInfo, OptIdInfo(..), ArityInfo, DeforestInfo, Demand, StrictnessInfo, UpdateInfo )
29 import Kind             ( Kind )
30 import Literal          ( Literal )
31 import Maybes           ( MaybeErr )
32 import MatchEnv         ( MatchEnv )
33 import Name             ( Module(..), RdrName, Name, ExportFlag, NamedThing(..) )
34 import Outputable       ( Outputable(..) )
35 import PprStyle         ( PprStyle )
36 import PragmaInfo       ( PragmaInfo )
37 import Pretty           ( PrettyRep )
38 import PrimOp           ( PrimOp )
39 import PrimRep          ( PrimRep )
40 import RnHsSyn          ( RnName )
41 import SMRep            ( SMRep )
42 import SrcLoc           ( SrcLoc )
43 import TcType           ( TcMaybe )
44 import TyCon            ( TyCon, Arity(..) )
45 import TyVar            ( GenTyVar, TyVar(..) )
46 import Type             ( GenType, Type(..) )
47 import UniqFM           ( UniqFM, Uniquable(..) )
48 import UniqSupply       ( UniqSupply )
49 import Unique           ( Unique )
50 import Usage            ( GenUsage, Usage(..) )
51 import Util             ( Ord3(..) )
52
53 -- All the classes in GHC go; life is just too short
54 -- to try to contain their visibility.
55
56 class NamedThing a where
57         getName :: a -> Name
58 class OptIdInfo a where
59         noInfo  :: a
60         getInfo :: IdInfo -> a
61         addInfo :: IdInfo -> a -> IdInfo
62         ppInfo  :: PprStyle -> (Id -> Id) -> a -> Int -> Bool -> PrettyRep
63 class Ord3 a where
64         cmp :: a -> a -> Int#
65 class Outputable a where
66         ppr :: PprStyle -> a -> Int -> Bool -> PrettyRep
67 class Uniquable a where
68         uniqueOf :: a -> Unique
69
70 -- For datatypes, we ubiquitize those types that (a) are
71 -- used everywhere and (b) the compiler doesn't lose much
72 -- optimisation-wise by not seeing their pragma-gunk.
73
74 data ArityInfo
75 data Bag a
76 data BinderInfo
77 data CgIdInfo
78 data CLabel
79 data ClassOpPragmas a
80 data ClassPragmas a
81 data ClosureInfo
82 data Coercion
83 data CostCentre
84 data CSeq
85 data DataPragmas a
86 data DeforestInfo
87 data Demand
88 data ExportFlag
89 data FieldLabel
90 data FiniteMap a b
91 data GenClass a b
92 data GenClassOp a
93 data GenCoreArg a b c
94 data GenCoreBinder a b c
95 data GenCoreBinding a b c d
96 data GenCoreCaseAlts a b c d
97 data GenCoreCaseDefault a b c d
98 data GenCoreExpr a b c d
99 data GenId a    -- NB: fails the optimisation criterion
100 data GenPragmas a
101 data GenTyVar a -- NB: fails the optimisation criterion
102 data GenType  a b
103 data GenUsage a
104 data HeapOffset
105 data IdInfo
106 data InstancePragmas a
107 data Kind
108 data LambdaFormInfo
109 data Literal
110 data MaybeErr a b
111 data MatchEnv a b
112 data Name
113 data RdrName = Unqual _PackedString | Qual _PackedString _PackedString
114 data OutPat a b c
115 data PprStyle
116 data PragmaInfo
117 data PrettyRep
118 data PrimOp
119 data PrimRep    -- NB: an enumeration
120 data RnName
121 data SimplifierSwitch
122 data SMRep
123 data SrcLoc
124 data StrictnessInfo
125 data StrictnessMark
126 data SwitchResult
127 data TcMaybe s
128 data TyCon
129 data UnfoldingCoreExpr a
130 data UniqFM a
131 data UpdateInfo
132 data UniqSupply
133 data UnfoldingDetails
134 data UnfoldingGuidance
135 data Unique     -- NB: fails the optimisation criterion
136
137 -- don't get clever and unexpand some of these synonyms
138 -- (GHC 0.26 will barf)
139 type Module = _PackedString
140 type Arity = Int
141 type Class = GenClass (GenTyVar (GenUsage Unique)) Unique
142 type ClassOp = GenClassOp (GenType (GenTyVar (GenUsage Unique)) Unique)
143 type Id    = GenId (GenType (GenTyVar (GenUsage Unique)) Unique)
144 type Type  = GenType (GenTyVar (GenUsage Unique)) Unique
145 type TyVar = GenTyVar (GenUsage Unique)
146 type Usage = GenUsage Unique
147 \end{code}