[project @ 1996-03-19 08:58:34 by partain]
[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 Class            ( GenClass, GenClassOp, Class(..), ClassOp )
11 import CmdLineOpts      ( SimplifierSwitch, SwitchResult )
12 import CoreSyn          ( GenCoreArg, GenCoreBinder, GenCoreBinding, GenCoreExpr,
13                           GenCoreCaseAlts, GenCoreCaseDefault
14                         )
15 import CoreUnfold       ( UnfoldingDetails, UnfoldingGuidance )
16 import CostCentre       ( CostCentre )
17 import FiniteMap        ( FiniteMap )
18 import HsCore           ( UnfoldingCoreExpr )
19 import HsPat            ( OutPat )
20 import HsPragmas        ( ClassOpPragmas, ClassPragmas, DataPragmas, GenPragmas,
21                           InstancePragmas
22                         )
23 import Id               ( StrictnessMark, GenId, Id(..) )
24 import IdInfo           ( IdInfo, OptIdInfo(..), DeforestInfo, Demand, StrictnessInfo, UpdateInfo )
25 import Kind             ( Kind )
26 import Literal          ( Literal )
27 import Maybes           ( MaybeErr )
28 import MatchEnv         ( MatchEnv )
29 import Name             ( Name )
30 import NameTypes        ( FullName, ShortName )
31 import Outputable       ( ExportFlag, NamedThing(..), Outputable(..) )
32 import PprStyle         ( PprStyle )
33 import PragmaInfo       ( PragmaInfo )
34 import Pretty           ( PrettyRep )
35 import PrimOp           ( PrimOp )
36 import PrimRep          ( PrimRep )
37 import ProtoName        ( ProtoName )
38 import SrcLoc           ( SrcLoc )
39 import TcType           ( TcMaybe )
40 import TyCon            ( TyCon, Arity(..) )
41 import TyVar            ( GenTyVar, TyVar(..) )
42 import Type             ( GenType, Type(..) )
43 import UniqFM           ( UniqFM )
44 import UniqSupply       ( UniqSupply )
45 import Unique           ( Unique )
46 import Usage            ( GenUsage, Usage(..) )
47 import Util             ( Ord3(..) )
48
49 -- All the classes in GHC go; life is just too short
50 -- to try to contain their visibility.
51
52 class NamedThing a where
53         getExportFlag :: a -> ExportFlag
54         isLocallyDefined :: a -> Bool
55         getOrigName :: a -> (_PackedString, _PackedString)
56         getOccurrenceName :: a -> _PackedString
57         getInformingModules :: a -> [_PackedString]
58         getSrcLoc :: a -> SrcLoc
59         getItsUnique :: a -> Unique
60         fromPreludeCore :: a -> Bool
61 class OptIdInfo a where
62         noInfo  :: a
63         getInfo :: IdInfo -> a
64         addInfo :: IdInfo -> a -> IdInfo
65         ppInfo  :: PprStyle -> (Id -> Id) -> a -> Int -> Bool -> PrettyRep
66 class Ord3 a where
67         cmp :: a -> a -> Int#
68 class Outputable a where
69         ppr :: PprStyle -> a -> Int -> Bool -> PrettyRep
70
71 -- For datatypes, we ubiquitize those types that (a) are
72 -- used everywhere and (b) the compiler doesn't lose much
73 -- optimisation-wise by not seeing their pragma-gunk.
74
75 data Bag a
76 data BinderInfo
77 data ClassOpPragmas a
78 data ClassPragmas a
79 data CostCentre
80 data DataPragmas a
81 data DeforestInfo
82 data Demand
83 data ExportFlag
84 data FiniteMap a b
85 data FullName   -- NB: fails the optimisation criterion
86 data GenClass a b
87 data GenClassOp a
88 data GenCoreArg a b c
89 data GenCoreBinder a b c
90 data GenCoreBinding a b c d
91 data GenCoreCaseAlts a b c d
92 data GenCoreCaseDefault a b c d
93 data GenCoreExpr a b c d
94 data GenId a    -- NB: fails the optimisation criterion
95 data GenPragmas a
96 data GenTyVar a -- NB: fails the optimisation criterion
97 data GenType  a b
98 data GenUsage a
99 data IdInfo
100 data InstancePragmas a
101 data Kind
102 data Literal
103 data MaybeErr a b
104 data MatchEnv a b
105 data Name
106 data OutPat a b c
107 data PprStyle
108 data PragmaInfo
109 data PrettyRep
110 data PrimOp
111 data PrimRep    -- NB: an enumeration
112 data ProtoName
113 data ShortName  -- NB: fails the optimisation criterion
114 data SimplifierSwitch
115 data SrcLoc
116 data StrictnessInfo
117 data StrictnessMark
118 data SwitchResult
119 data TcMaybe s
120 data TyCon
121 data UnfoldingCoreExpr a
122 data UniqFM a
123 data UpdateInfo
124 data UniqSupply
125 data UnfoldingDetails
126 data UnfoldingGuidance
127 data Unique     -- NB: fails the optimisation criterion
128
129 -- don't get clever and unexpand some of these synonyms
130 -- (GHC 0.26 will barf)
131 type Arity = Int
132 type Class = GenClass (GenTyVar (GenUsage Unique)) Unique
133 type ClassOp = GenClassOp (GenType (GenTyVar (GenUsage Unique)) Unique)
134 type Id    = GenId (GenType (GenTyVar (GenUsage Unique)) Unique)
135 type Type  = GenType (GenTyVar (GenUsage Unique)) Unique
136 type TyVar = GenTyVar (GenUsage Unique)
137 type Usage = GenUsage Unique
138 \end{code}