[project @ 2000-09-22 15:56:12 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelNames]{Definitions of prelude modules}
5
6 The strings identify built-in prelude modules.  They are
7 defined here so as to avod 
8
9 [oh dear, looks like the recursive module monster caught up with
10  and gobbled whoever was writing the above :-) -- SOF ]
11
12 \begin{code}
13 module PrelNames
14         (
15         -- Prelude modules
16         pREL_GHC, pREL_BASE, pREL_ADDR, pREL_STABLE,
17         pREL_IO_BASE, pREL_PACK, pREL_ERR, pREL_NUM, pREL_FLOAT, pREL_REAL,
18
19         -- Module names (both Prelude and otherwise)
20         pREL_GHC_Name, pRELUDE_Name, 
21         mAIN_Name, pREL_MAIN_Name, pREL_ERR_Name,
22         pREL_BASE_Name, pREL_NUM_Name, pREL_LIST_Name, 
23         pREL_TUP_Name, pREL_ADDR_Name, pREL_READ_Name,
24         pREL_PACK_Name, pREL_CONC_Name, pREL_IO_BASE_Name, 
25         pREL_ST_Name, pREL_ARR_Name, pREL_BYTEARR_Name, pREL_FOREIGN_Name,
26         pREL_STABLE_Name, pREL_SHOW_Name, pREL_ENUM_Name, iNT_Name, wORD_Name,
27         pREL_REAL_Name, pREL_FLOAT_Name,
28
29         -- RdrNames for lots of things, mainly used in derivings
30         eq_RDR, ne_RDR, le_RDR, lt_RDR, ge_RDR, gt_RDR, max_RDR, min_RDR, 
31         compare_RDR, minBound_RDR, maxBound_RDR, enumFrom_RDR, enumFromTo_RDR,
32         enumFromThen_RDR, enumFromThenTo_RDR, succ_RDR, pred_RDR, fromEnum_RDR, toEnum_RDR, 
33         ratioDataCon_RDR, range_RDR, index_RDR, inRange_RDR, readsPrec_RDR,
34         readList_RDR, showsPrec_RDR, showList_RDR, plus_RDR, times_RDR,
35         ltTag_RDR, eqTag_RDR, gtTag_RDR, false_RDR, true_RDR,
36         and_RDR, not_RDR, append_RDR, map_RDR, compose_RDR, mkInt_RDR,
37         error_RDR, assertErr_RDR, 
38         showString_RDR, showParen_RDR, readParen_RDR, lex_RDR,
39         showSpace_RDR, showList___RDR, readList___RDR, negate_RDR,
40         addr2Integer_RDR, ioTyCon_RDR,
41         foldr_RDR, build_RDR, getTag_RDR, plusInteger_RDR, timesInteger_RDR, eqString_RDR,
42
43         orderingTyCon_RDR, rationalTyCon_RDR, ratioTyCon_RDR, byteArrayTyCon_RDR,
44         mutableByteArrayTyCon_RDR, foreignObjTyCon_RDR,
45         bcoPrimTyCon_RDR,
46         intTyCon_RDR, stablePtrTyCon_RDR, stablePtrDataCon_RDR, 
47         int8TyCon_RDR, int16TyCon_RDR, int32TyCon_RDR, int64TyCon_RDR,
48         word8TyCon_RDR, word16TyCon_RDR, word32TyCon_RDR, word64TyCon_RDR,
49
50         boundedClass_RDR, monadPlusClass_RDR, functorClass_RDR, showClass_RDR, 
51         realClass_RDR, integralClass_RDR, floatingClass_RDR, realFracClass_RDR,
52         realFloatClass_RDR, readClass_RDR, ixClass_RDR, 
53         fromInt_RDR, fromInteger_RDR, minus_RDR, fromRational_RDR, 
54
55         bindIO_RDR, returnIO_RDR, thenM_RDR, returnM_RDR, failM_RDR,
56
57         deRefStablePtr_RDR, makeStablePtr_RDR, 
58         concat_RDR, filter_RDR, zip_RDR, augment_RDR,
59         otherwiseId_RDR, assert_RDR, runSTRep_RDR,
60
61         unpackCString_RDR, unpackCStringAppend_RDR, unpackCStringFoldr_RDR,
62         unpackCStringUtf8_RDR,
63         numClass_RDR, fractionalClass_RDR, eqClass_RDR, 
64         ccallableClass_RDR, creturnableClass_RDR,
65         monadClass_RDR, enumClass_RDR, ordClass_RDR,
66         ioDataCon_RDR,
67
68         main_RDR,
69
70         mkTupNameStr, mkTupConRdrName
71
72         ) where
73
74 #include "HsVersions.h"
75
76 import Module     ( ModuleName, mkPrelModule, mkSrcModule )
77 import OccName    ( NameSpace, varName, dataName, tcName, clsName )
78 import RdrName    ( RdrName, mkPreludeQual )
79 import BasicTypes ( Boxity(..), Arity )
80 import Util       ( nOfThem )
81 import Panic      ( panic )
82 \end{code}
83
84 %************************************************************************
85 %*                                                                      *
86 \subsection{Module names}
87 %*                                                                      *
88 %************************************************************************
89
90 \begin{code}
91 pRELUDE_Name      = mkSrcModule "Prelude"
92 pREL_GHC_Name     = mkSrcModule "PrelGHC"          -- Primitive types and values
93 pREL_BASE_Name    = mkSrcModule "PrelBase"
94 pREL_ENUM_Name    = mkSrcModule "PrelEnum"
95 pREL_SHOW_Name    = mkSrcModule "PrelShow"
96 pREL_READ_Name    = mkSrcModule "PrelRead"
97 pREL_NUM_Name     = mkSrcModule "PrelNum"
98 pREL_LIST_Name    = mkSrcModule "PrelList"
99 pREL_TUP_Name     = mkSrcModule "PrelTup"
100 pREL_PACK_Name    = mkSrcModule "PrelPack"
101 pREL_CONC_Name    = mkSrcModule "PrelConc"
102 pREL_IO_BASE_Name = mkSrcModule "PrelIOBase"
103 pREL_ST_Name      = mkSrcModule "PrelST"
104 pREL_ARR_Name     = mkSrcModule "PrelArr"
105 pREL_BYTEARR_Name = mkSrcModule "PrelByteArr"
106 pREL_FOREIGN_Name = mkSrcModule "PrelForeign"
107 pREL_STABLE_Name  = mkSrcModule "PrelStable"
108 pREL_ADDR_Name    = mkSrcModule "PrelAddr"
109 pREL_ERR_Name     = mkSrcModule "PrelErr"
110 pREL_REAL_Name    = mkSrcModule "PrelReal"
111 pREL_FLOAT_Name   = mkSrcModule "PrelFloat"
112
113 pREL_MAIN_Name   = mkSrcModule "PrelMain"
114 mAIN_Name        = mkSrcModule "Main"
115 iNT_Name         = mkSrcModule "Int"
116 wORD_Name        = mkSrcModule "Word"
117
118 pREL_GHC     = mkPrelModule pREL_GHC_Name
119 pREL_BASE    = mkPrelModule pREL_BASE_Name
120 pREL_ADDR    = mkPrelModule pREL_ADDR_Name
121 pREL_STABLE  = mkPrelModule pREL_STABLE_Name
122 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
123 pREL_PACK    = mkPrelModule pREL_PACK_Name
124 pREL_ERR     = mkPrelModule pREL_ERR_Name
125 pREL_NUM     = mkPrelModule pREL_NUM_Name
126 pREL_REAL    = mkPrelModule pREL_REAL_Name
127 pREL_FLOAT   = mkPrelModule pREL_FLOAT_Name
128 \end{code}
129
130 %************************************************************************
131 %*                                                                      *
132 \subsection{Constructing the names of tuples
133 %*                                                                      *
134 %************************************************************************
135
136 \begin{code}
137 mkTupNameStr :: Boxity -> Int -> (ModuleName, FAST_STRING)
138
139 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
140 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
141 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
142 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
143 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
144 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
145
146 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
147 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
148 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
149 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
150 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
151 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
152
153 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
154 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
155                                           (mod, occ) -> mkPreludeQual space mod occ
156 \end{code}
157
158
159
160 %************************************************************************
161 %*                                                                      *
162 \subsection{Commonly-used RdrNames}
163 %*                                                                      *
164 %************************************************************************
165
166 These RdrNames are not really "built in", but some parts of the compiler
167 (notably the deriving mechanism) need to mention their names, and it's convenient
168 to write them all down in one place.
169
170 \begin{code}
171 main_RDR                = varQual mAIN_Name      SLIT("main")
172
173 ioTyCon_RDR             = tcQual   pREL_IO_BASE_Name SLIT("IO")
174 ioDataCon_RDR           = dataQual pREL_IO_BASE_Name SLIT("IO")
175 bindIO_RDR              = varQual  pREL_IO_BASE_Name SLIT("bindIO")
176 returnIO_RDR            = varQual  pREL_IO_BASE_Name SLIT("returnIO")
177
178
179 rationalTyCon_RDR       = tcQual   pREL_REAL_Name  SLIT("Rational")
180 ratioTyCon_RDR          = tcQual   pREL_REAL_Name  SLIT("Ratio")
181 ratioDataCon_RDR        = dataQual pREL_REAL_Name  SLIT(":%")
182
183 byteArrayTyCon_RDR              = tcQual pREL_BYTEARR_Name  SLIT("ByteArray")
184 mutableByteArrayTyCon_RDR       = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray")
185
186 foreignObjTyCon_RDR     = tcQual   pREL_IO_BASE_Name SLIT("ForeignObj")
187 bcoPrimTyCon_RDR        = tcQual   pREL_BASE_Name SLIT("BCO#")
188 stablePtrTyCon_RDR      = tcQual   pREL_STABLE_Name SLIT("StablePtr")
189 stablePtrDataCon_RDR    = dataQual pREL_STABLE_Name SLIT("StablePtr")
190 deRefStablePtr_RDR      = varQual  pREL_STABLE_Name SLIT("deRefStablePtr")
191 makeStablePtr_RDR       = varQual  pREL_STABLE_Name SLIT("makeStablePtr")
192
193 -- Random PrelBase data types and constructors
194 intTyCon_RDR       = tcQual   pREL_BASE_Name SLIT("Int")
195 orderingTyCon_RDR  = tcQual   pREL_BASE_Name SLIT("Ordering")
196 mkInt_RDR          = dataQual pREL_BASE_Name SLIT("I#")
197 false_RDR          = dataQual pREL_BASE_Name SLIT("False")
198 true_RDR           = dataQual pREL_BASE_Name SLIT("True")
199
200 -- Random PrelBase functions
201 otherwiseId_RDR    = varQual pREL_BASE_Name SLIT("otherwise")
202 and_RDR            = varQual pREL_BASE_Name SLIT("&&")
203 not_RDR            = varQual pREL_BASE_Name SLIT("not")
204 compose_RDR        = varQual pREL_BASE_Name SLIT(".")
205 append_RDR         = varQual pREL_BASE_Name SLIT("++")
206 foldr_RDR          = varQual pREL_BASE_Name SLIT("foldr")
207 map_RDR            = varQual pREL_BASE_Name SLIT("map")
208 build_RDR          = varQual pREL_BASE_Name SLIT("build")
209 augment_RDR        = varQual pREL_BASE_Name SLIT("augment")
210 eqString_RDR       = varQual pREL_BASE_Name SLIT("eqString")
211
212 -- Strings
213 unpackCString_RDR       = varQual pREL_BASE_Name SLIT("unpackCString#")
214 unpackCStringAppend_RDR = varQual pREL_BASE_Name SLIT("unpackAppendCString#")
215 unpackCStringFoldr_RDR  = varQual pREL_BASE_Name SLIT("unpackFoldrCString#")
216 unpackCStringUtf8_RDR   = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#")
217
218 -- Classes Eq and Ord
219 eqClass_RDR             = clsQual pREL_BASE_Name SLIT("Eq")
220 ordClass_RDR            = clsQual pREL_BASE_Name SLIT("Ord")
221 eq_RDR             = varQual pREL_BASE_Name SLIT("==")
222 ne_RDR             = varQual pREL_BASE_Name SLIT("/=")
223 le_RDR             = varQual pREL_BASE_Name SLIT("<=")
224 lt_RDR             = varQual pREL_BASE_Name SLIT("<")
225 ge_RDR             = varQual pREL_BASE_Name SLIT(">=")
226 gt_RDR             = varQual pREL_BASE_Name SLIT(">")
227 ltTag_RDR          = dataQual pREL_BASE_Name SLIT("LT")
228 eqTag_RDR          = dataQual pREL_BASE_Name SLIT("EQ")
229 gtTag_RDR          = dataQual pREL_BASE_Name SLIT("GT")
230 max_RDR            = varQual pREL_BASE_Name SLIT("max")
231 min_RDR            = varQual pREL_BASE_Name SLIT("min")
232 compare_RDR        = varQual pREL_BASE_Name SLIT("compare")
233
234 -- Class Monad
235 monadClass_RDR     = clsQual pREL_BASE_Name SLIT("Monad")
236 monadPlusClass_RDR = clsQual pREL_BASE_Name SLIT("MonadPlus")
237 thenM_RDR          = varQual pREL_BASE_Name SLIT(">>=")
238 returnM_RDR        = varQual pREL_BASE_Name SLIT("return")
239 failM_RDR          = varQual pREL_BASE_Name SLIT("fail")
240
241 -- Class Functor
242 functorClass_RDR        = clsQual pREL_BASE_Name SLIT("Functor")
243
244 -- Class Show
245 showClass_RDR      = clsQual pREL_SHOW_Name SLIT("Show")
246 showList___RDR     = varQual pREL_SHOW_Name SLIT("showList__")
247 showsPrec_RDR      = varQual pREL_SHOW_Name SLIT("showsPrec")
248 showList_RDR       = varQual pREL_SHOW_Name SLIT("showList")
249 showSpace_RDR      = varQual pREL_SHOW_Name SLIT("showSpace")
250 showString_RDR     = varQual pREL_SHOW_Name SLIT("showString")
251 showParen_RDR      = varQual pREL_SHOW_Name SLIT("showParen")
252
253
254 -- Class Read
255 readClass_RDR      = clsQual pREL_READ_Name SLIT("Read")
256 readsPrec_RDR      = varQual pREL_READ_Name SLIT("readsPrec")
257 readList_RDR       = varQual pREL_READ_Name SLIT("readList")
258 readParen_RDR      = varQual pREL_READ_Name SLIT("readParen")
259 lex_RDR            = varQual pREL_READ_Name SLIT("lex")
260 readList___RDR     = varQual pREL_READ_Name SLIT("readList__")
261
262
263 -- Class Num
264 numClass_RDR       = clsQual pREL_NUM_Name SLIT("Num")
265 fromInt_RDR        = varQual pREL_NUM_Name SLIT("fromInt")
266 fromInteger_RDR    = varQual pREL_NUM_Name SLIT("fromInteger")
267 minus_RDR          = varQual pREL_NUM_Name SLIT("-")
268 negate_RDR         = varQual pREL_NUM_Name SLIT("negate")
269 plus_RDR           = varQual pREL_NUM_Name SLIT("+")
270 times_RDR          = varQual pREL_NUM_Name SLIT("*")
271 addr2Integer_RDR   = varQual pREL_NUM_Name SLIT("addr2Integer")
272 plusInteger_RDR    = varQual pREL_NUM_Name SLIT("plusInteger")
273 timesInteger_RDR   = varQual pREL_NUM_Name SLIT("timesInteger")
274
275 -- Other numberic classes
276 realClass_RDR           = clsQual pREL_REAL_Name  SLIT("Real")
277 integralClass_RDR       = clsQual pREL_REAL_Name  SLIT("Integral")
278 realFracClass_RDR       = clsQual pREL_REAL_Name  SLIT("RealFrac")
279 fractionalClass_RDR     = clsQual pREL_REAL_Name  SLIT("Fractional")
280 fromRational_RDR        = varQual pREL_REAL_Name  SLIT("fromRational")
281
282 floatingClass_RDR       = clsQual pREL_FLOAT_Name  SLIT("Floating")
283 realFloatClass_RDR      = clsQual pREL_FLOAT_Name  SLIT("RealFloat")
284
285 -- Class Ix
286 ixClass_RDR        = clsQual pREL_ARR_Name SLIT("Ix")
287 range_RDR          = varQual pREL_ARR_Name SLIT("range")
288 index_RDR          = varQual pREL_ARR_Name SLIT("index")
289 inRange_RDR        = varQual pREL_ARR_Name SLIT("inRange")
290
291 -- Class CCallable and CReturnable
292 ccallableClass_RDR      = clsQual pREL_GHC_Name  SLIT("CCallable")
293 creturnableClass_RDR    = clsQual pREL_GHC_Name  SLIT("CReturnable")
294
295 -- Class Enum
296 enumClass_RDR      = clsQual pREL_ENUM_Name SLIT("Enum")
297 succ_RDR           = varQual pREL_ENUM_Name SLIT("succ")
298 pred_RDR           = varQual pREL_ENUM_Name SLIT("pred")
299 toEnum_RDR         = varQual pREL_ENUM_Name SLIT("toEnum")
300 fromEnum_RDR       = varQual pREL_ENUM_Name SLIT("fromEnum")
301 enumFrom_RDR       = varQual pREL_ENUM_Name SLIT("enumFrom")
302 enumFromTo_RDR     = varQual pREL_ENUM_Name SLIT("enumFromTo")
303 enumFromThen_RDR   = varQual pREL_ENUM_Name SLIT("enumFromThen")
304 enumFromThenTo_RDR = varQual pREL_ENUM_Name SLIT("enumFromThenTo")
305
306 -- Class Bounded
307 boundedClass_RDR   = clsQual pREL_ENUM_Name SLIT("Bounded")
308 minBound_RDR       = varQual pREL_ENUM_Name SLIT("minBound")
309 maxBound_RDR       = varQual pREL_ENUM_Name SLIT("maxBound")
310
311
312 -- List functions
313 concat_RDR         = varQual pREL_LIST_Name SLIT("concat")
314 filter_RDR         = varQual pREL_LIST_Name SLIT("filter")
315 zip_RDR            = varQual pREL_LIST_Name SLIT("zip")
316
317 int8TyCon_RDR    = tcQual iNT_Name       SLIT("Int8")
318 int16TyCon_RDR   = tcQual iNT_Name       SLIT("Int16")
319 int32TyCon_RDR   = tcQual iNT_Name       SLIT("Int32")
320 int64TyCon_RDR   = tcQual pREL_ADDR_Name SLIT("Int64")
321
322 word8TyCon_RDR    = tcQual wORD_Name      SLIT("Word8")
323 word16TyCon_RDR   = tcQual wORD_Name      SLIT("Word16")
324 word32TyCon_RDR   = tcQual wORD_Name      SLIT("Word32")
325 word64TyCon_RDR   = tcQual pREL_ADDR_Name SLIT("Word64")
326
327 error_RDR          = varQual pREL_ERR_Name SLIT("error")
328 assert_RDR         = varQual pREL_GHC_Name SLIT("assert")
329 getTag_RDR         = varQual pREL_GHC_Name SLIT("getTag#")
330 assertErr_RDR      = varQual pREL_ERR_Name SLIT("assertError")
331 runSTRep_RDR       = varQual pREL_ST_Name  SLIT("runSTRep")
332 \end{code}
333
334
335 %************************************************************************
336 %*                                                                      *
337 \subsection{Local helpers}
338 %*                                                                      *
339 %************************************************************************
340
341 \begin{code}
342 varQual  = mkPreludeQual varName
343 dataQual = mkPreludeQual dataName
344 tcQual   = mkPreludeQual tcName
345 clsQual  = mkPreludeQual clsName
346 \end{code}
347