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