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