[project @ 2000-10-19 15:00:16 by sewardj]
[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         Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
15
16         -----------------------------------------------------------
17         module PrelNames,       -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR
18                                 --                 (b) Uniques   e.g. intTyConKey
19                                 -- So many that we export them all
20
21         -----------------------------------------------------------
22         knownKeyNames, 
23         mkTupNameStr, mkTupConRdrName,
24
25         ------------------------------------------------------------
26         -- Goups of classes and types
27         needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
28         fractionalClassKeys, numericClassKeys, standardClassKeys,
29         derivingOccurrences,    -- For a given class C, this tells what other 
30         derivableClassKeys,     -- things are needed as a result of a 
31                                 -- deriving(C) clause
32         numericTyKeys, cCallishTyKeys,
33
34         mkUnboundName, isUnboundName
35     ) where
36
37 #include "HsVersions.h"
38
39 import Module     ( ModuleName, mkPrelModule, mkModuleName )
40 import OccName    ( NameSpace, varName, dataName, tcName, clsName )
41 import RdrName    ( RdrName, mkPreludeQual )
42 import UniqFM
43 import Unique     ( Unique, Uniquable(..), hasKey,
44                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
45                     mkPreludeTyConUnique, mkPreludeClassUnique
46                   ) 
47 import BasicTypes ( Boxity(..), Arity )
48 import UniqFM     ( UniqFM, listToUFM )
49 import Name       ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
50 import RdrName    ( rdrNameOcc )
51 import SrcLoc     ( noSrcLoc )
52 import Util       ( nOfThem )
53 import Panic      ( panic )
54 \end{code}
55
56
57 %************************************************************************
58 %*                                                                      *
59 \subsection{Known key Names}
60 %*                                                                      *
61 %************************************************************************
62
63 This section tells what the compiler knows about the assocation of
64 names with uniques.  These ones are the *non* wired-in ones.  The
65 wired in ones are defined in TysWiredIn etc.
66
67 \begin{code}
68 knownKeyNames :: [Name]
69 knownKeyNames
70  =  [
71         -- Type constructors (synonyms especially)
72         ioTyConName,
73         mainName,
74         orderingTyConName,
75         rationalTyConName,
76         ratioDataConName,
77         ratioTyConName,
78         byteArrayTyConName,
79         mutableByteArrayTyConName,
80         foreignObjTyConName,
81         bcoPrimTyConName,
82         stablePtrTyConName,
83         stablePtrDataConName,
84
85         --  Classes.  *Must* include:
86         --      classes that are grabbed by key (e.g., eqClassKey)
87         --      classes in "Class.standardClassKeys" (quite a few)
88         eqClassName,                    -- mentioned, derivable
89         ordClassName,                   -- derivable
90         boundedClassName,               -- derivable
91         numClassName,                   -- mentioned, numeric
92         enumClassName,                  -- derivable
93         monadClassName,
94         monadPlusClassName,
95         functorClassName,
96         showClassName,                  -- derivable
97         realClassName,                  -- numeric
98         integralClassName,              -- numeric
99         fractionalClassName,            -- numeric
100         floatingClassName,              -- numeric
101         realFracClassName,              -- numeric
102         realFloatClassName,             -- numeric
103         readClassName,                  -- derivable
104         ixClassName,                    -- derivable (but it isn't Prelude.Ix; hmmm)
105         cCallableClassName,             -- mentioned, ccallish
106         cReturnableClassName,           -- mentioned, ccallish
107
108         -- ClassOps 
109         fromIntName,
110         fromIntegerName,
111         geName,
112         minusName,
113         enumFromName,
114         enumFromThenName,
115         enumFromToName,
116         enumFromThenToName,
117         fromEnumName,
118         toEnumName,
119         eqName,
120         thenMName,
121         returnMName,
122         failMName,
123         fromRationalName,
124     
125         deRefStablePtrName,
126         makeStablePtrName,
127         bindIOName,
128         returnIOName,
129
130         -- Strings and lists
131         mapName,
132         appendName,
133         unpackCStringName,
134         unpackCStringAppendName,
135         unpackCStringFoldrName,
136         unpackCStringUtf8Name,
137
138         -- List operations
139         concatName,
140         filterName,
141         zipName,
142         foldrName,
143         buildName,
144         augmentName,
145
146         -- FFI primitive types that are not wired-in.
147         int8TyConName,
148         int16TyConName,
149         int32TyConName,
150         int64TyConName,
151         word8TyConName,
152         word16TyConName,
153         word32TyConName,
154         word64TyConName,
155
156         -- Others
157         otherwiseIdName,
158         plusIntegerName,
159         timesIntegerName,
160         eqStringName,
161         assertName,
162         runSTRepName
163     ]
164 \end{code}
165
166
167 %************************************************************************
168 %*                                                                      *
169 \subsection{Module names}
170 %*                                                                      *
171 %************************************************************************
172
173 \begin{code}
174 pRELUDE_Name      = mkModuleName "Prelude"
175 pREL_GHC_Name     = mkModuleName "PrelGHC"         -- Primitive types and values
176 pREL_BASE_Name    = mkModuleName "PrelBase"
177 pREL_ENUM_Name    = mkModuleName "PrelEnum"
178 pREL_SHOW_Name    = mkModuleName "PrelShow"
179 pREL_READ_Name    = mkModuleName "PrelRead"
180 pREL_NUM_Name     = mkModuleName "PrelNum"
181 pREL_LIST_Name    = mkModuleName "PrelList"
182 pREL_TUP_Name     = mkModuleName "PrelTup"
183 pREL_PACK_Name    = mkModuleName "PrelPack"
184 pREL_CONC_Name    = mkModuleName "PrelConc"
185 pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
186 pREL_ST_Name      = mkModuleName "PrelST"
187 pREL_ARR_Name     = mkModuleName "PrelArr"
188 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
189 pREL_FOREIGN_Name = mkModuleName "PrelForeign"
190 pREL_STABLE_Name  = mkModuleName "PrelStable"
191 pREL_ADDR_Name    = mkModuleName "PrelAddr"
192 pREL_ERR_Name     = mkModuleName "PrelErr"
193 pREL_REAL_Name    = mkModuleName "PrelReal"
194 pREL_FLOAT_Name   = mkModuleName "PrelFloat"
195
196 pREL_MAIN_Name    = mkModuleName "PrelMain"
197 mAIN_Name         = mkModuleName "Main"
198 iNT_Name          = mkModuleName "Int"
199 wORD_Name         = mkModuleName "Word"
200
201 pREL_GHC        = mkPrelModule pREL_GHC_Name
202 pREL_BASE       = mkPrelModule pREL_BASE_Name
203 pREL_ADDR       = mkPrelModule pREL_ADDR_Name
204 pREL_STABLE     = mkPrelModule pREL_STABLE_Name
205 pREL_IO_BASE    = mkPrelModule pREL_IO_BASE_Name
206 pREL_PACK       = mkPrelModule pREL_PACK_Name
207 pREL_ERR        = mkPrelModule pREL_ERR_Name
208 pREL_NUM        = mkPrelModule pREL_NUM_Name
209 pREL_REAL       = mkPrelModule pREL_REAL_Name
210 pREL_FLOAT      = mkPrelModule pREL_FLOAT_Name
211 \end{code}
212
213 %************************************************************************
214 %*                                                                      *
215 \subsection{Constructing the names of tuples
216 %*                                                                      *
217 %************************************************************************
218
219 \begin{code}
220 mkTupNameStr :: Boxity -> Int -> (ModuleName, FAST_STRING)
221
222 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
223 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
224 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
225 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
226 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
227 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
228
229 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
230 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
231 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
232 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
233 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
234 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
235
236 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
237 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
238                                           (mod, occ) -> mkPreludeQual space mod occ
239 \end{code}
240
241
242 %************************************************************************
243 %*                                                                      *
244 \subsection{Commonly-used RdrNames}
245 %*                                                                      *
246 %************************************************************************
247
248 These RdrNames are not really "built in", but some parts of the
249 compiler (notably the deriving mechanism) need to mention their names,
250 and it's convenient to write them all down in one place.
251
252 \begin{code}
253 mainName = varQual mAIN_Name SLIT("main") mainKey
254
255 -- Stuff from PrelGHC
256 funTyConName         = tcQual  pREL_GHC_Name SLIT("(->)")  funTyConKey
257 cCallableClassName   = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
258 cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
259
260 -- PrelBase data types and constructors
261 charTyConName     = tcQual   pREL_BASE_Name SLIT("Char") charTyConKey
262 charDataConName   = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
263 intTyConName      = tcQual   pREL_BASE_Name SLIT("Int") intTyConKey
264 intDataConName    = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
265 orderingTyConName = tcQual   pREL_BASE_Name SLIT("Ordering") orderingTyConKey
266 boolTyConName     = tcQual   pREL_BASE_Name SLIT("Bool") boolTyConKey
267 falseDataConName  = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
268 trueDataConName   = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
269 listTyConName     = tcQual   pREL_BASE_Name SLIT("[]") listTyConKey
270 nilDataConName    = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
271 consDataConName   = dataQual pREL_BASE_Name SLIT(":") consDataConKey
272
273 -- Generics
274 crossTyConName     = tcQual   pREL_BASE_Name SLIT(":*:") crossTyConKey
275 crossDataConName   = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
276 plusTyConName      = tcQual   pREL_BASE_Name SLIT(":+:") plusTyConKey
277 inlDataConName     = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
278 inrDataConName     = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
279 genUnitTyConName   = tcQual   pREL_BASE_Name SLIT("Unit") genUnitTyConKey
280 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
281
282 -- Random PrelBase functions
283 otherwiseIdName   = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
284 appendName        = varQual pREL_BASE_Name SLIT("++") appendIdKey
285 foldrName         = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
286 mapName           = varQual pREL_BASE_Name SLIT("map") mapIdKey
287 buildName         = varQual pREL_BASE_Name SLIT("build") buildIdKey
288 augmentName       = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
289 eqStringName      = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
290
291 -- Strings
292 unpackCStringName       = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
293 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
294 unpackCStringFoldrName  = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
295 unpackCStringUtf8Name   = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
296
297 -- Classes Eq and Ord
298 eqClassName       = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
299 ordClassName      = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
300 eqName            = varQual  pREL_BASE_Name SLIT("==") eqClassOpKey
301 geName            = varQual  pREL_BASE_Name SLIT(">=") geClassOpKey
302
303 -- Class Monad
304 monadClassName     = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
305 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
306 thenMName          = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
307 returnMName        = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
308 failMName          = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
309
310 -- Class Functor
311 functorClassName  = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
312
313 -- Class Show
314 showClassName     = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
315
316 -- Class Read
317 readClassName     = clsQual pREL_READ_Name SLIT("Read") readClassKey
318
319 -- Module PrelNum
320 numClassName      = clsQual pREL_NUM_Name SLIT("Num") numClassKey
321 fromIntName       = varQual pREL_NUM_Name SLIT("fromInt") fromIntClassOpKey
322 fromIntegerName   = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
323 minusName         = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
324 plusIntegerName   = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
325 timesIntegerName  = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
326 integerTyConName  = tcQual  pREL_NUM_Name SLIT("Integer") integerTyConKey
327 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
328 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
329
330 -- PrelReal types and classes
331 rationalTyConName   = tcQual   pREL_REAL_Name  SLIT("Rational") rationalTyConKey
332 ratioTyConName      = tcQual   pREL_REAL_Name  SLIT("Ratio") ratioTyConKey
333 ratioDataConName    = dataQual pREL_REAL_Name  SLIT(":%") ratioDataConKey
334 realClassName       = clsQual  pREL_REAL_Name  SLIT("Real") realClassKey
335 integralClassName   = clsQual  pREL_REAL_Name  SLIT("Integral") integralClassKey
336 realFracClassName   = clsQual  pREL_REAL_Name  SLIT("RealFrac") realFracClassKey
337 fractionalClassName = clsQual  pREL_REAL_Name  SLIT("Fractional") fractionalClassKey
338 fromRationalName    = varQual  pREL_REAL_Name  SLIT("fromRational") fromRationalClassOpKey
339
340 -- PrelFloat classes
341 floatTyConName     = tcQual   pREL_FLOAT_Name SLIT("Float") floatTyConKey
342 floatDataConName   = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
343 doubleTyConName    = tcQual   pREL_FLOAT_Name SLIT("Double") doubleTyConKey
344 doubleDataConName  = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
345 floatingClassName  = clsQual  pREL_FLOAT_Name SLIT("Floating") floatingClassKey
346 realFloatClassName = clsQual  pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
347
348 -- Class Ix
349 ixClassName        = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
350
351 -- Class Enum
352 enumClassName      = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
353 toEnumName         = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
354 fromEnumName       = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
355 enumFromName       = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
356 enumFromToName     = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
357 enumFromThenName   = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
358 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
359
360 -- Class Bounded
361 boundedClassName  = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
362
363 -- List functions
364 concatName        = varQual pREL_LIST_Name SLIT("concat") concatIdKey
365 filterName        = varQual pREL_LIST_Name SLIT("filter") filterIdKey
366 zipName           = varQual pREL_LIST_Name SLIT("zip") zipIdKey
367
368 -- IOBase things
369 ioTyConName       = tcQual   pREL_IO_BASE_Name SLIT("IO") ioTyConKey
370 ioDataConName     = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
371 bindIOName        = varQual  pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
372 returnIOName      = varQual  pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
373
374 -- Int, Word, and Addr things
375 int8TyConName     = tcQual iNT_Name       SLIT("Int8") int8TyConKey
376 int16TyConName    = tcQual iNT_Name       SLIT("Int16") int16TyConKey
377 int32TyConName    = tcQual iNT_Name       SLIT("Int32") int32TyConKey
378 int64TyConName    = tcQual pREL_ADDR_Name SLIT("Int64") int64TyConKey
379
380 wordTyConName     = tcQual   pREL_ADDR_Name SLIT("Word") wordTyConKey
381 wordDataConName   = dataQual pREL_ADDR_Name SLIT("W#") wordDataConKey
382 word8TyConName    = tcQual   wORD_Name      SLIT("Word8") word8TyConKey
383 word16TyConName   = tcQual   wORD_Name      SLIT("Word16") word16TyConKey
384 word32TyConName   = tcQual   wORD_Name      SLIT("Word32") word32TyConKey
385 word64TyConName   = tcQual   pREL_ADDR_Name SLIT("Word64") word64TyConKey
386
387 addrTyConName     = tcQual   pREL_ADDR_Name SLIT("Addr") addrTyConKey
388 addrDataConName   = dataQual pREL_ADDR_Name SLIT("A#") addrDataConKey
389
390
391 -- Byte array types
392 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  SLIT("ByteArray") byteArrayTyConKey
393 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray") mutableByteArrayTyConKey
394
395 -- Forign objects and weak pointers
396 foreignObjTyConName   = tcQual   pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjTyConKey
397 foreignObjDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjDataConKey
398 bcoPrimTyConName      = tcQual   pREL_BASE_Name SLIT("BCO#") bcoPrimTyConKey
399 stablePtrTyConName    = tcQual   pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
400 stablePtrDataConName  = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
401 deRefStablePtrName    = varQual  pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
402 makeStablePtrName     = varQual  pREL_STABLE_Name SLIT("makeStablePtr") makeStablePtrIdKey
403
404 errorName          = varQual pREL_ERR_Name SLIT("error") errorIdKey
405 assertName         = varQual pREL_GHC_Name SLIT("assert") assertIdKey
406 getTagName         = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
407 runSTRepName       = varQual pREL_ST_Name  SLIT("runSTRep") runSTRepIdKey
408 \end{code}
409
410 %************************************************************************
411 %*                                                                      *
412 \subsection{Known names}
413 %*                                                                      *
414 %************************************************************************
415
416 The following names are known to the compiler, but they don't require
417 pre-assigned keys.  Mostly these names are used in generating deriving
418 code, which is passed through the renamer anyway.
419
420 \begin{code}
421 unpackCString_RDR      = varQual_RDR  pREL_BASE_Name SLIT("unpackCString#")
422 unpackCStringFoldr_RDR = varQual_RDR  pREL_BASE_Name SLIT("unpackFoldrCString#")
423 unpackCStringUtf8_RDR  = varQual_RDR  pREL_BASE_Name SLIT("unpackCStringUtf8#")
424 deRefStablePtr_RDR = varQual_RDR  pREL_STABLE_Name  SLIT("deRefStablePtr")
425 makeStablePtr_RDR  = varQual_RDR  pREL_STABLE_Name  SLIT("makeStablePtr")
426 bindIO_RDR         = varQual_RDR  pREL_IO_BASE_Name SLIT("bindIO")
427 returnIO_RDR       = varQual_RDR  pREL_IO_BASE_Name SLIT("returnIO")
428
429 main_RDR           = varQual_RDR  mAIN_Name      SLIT("main")
430 and_RDR            = varQual_RDR  pREL_BASE_Name SLIT("&&")
431 not_RDR            = varQual_RDR  pREL_BASE_Name SLIT("not")
432 compose_RDR        = varQual_RDR  pREL_BASE_Name SLIT(".")
433 ne_RDR             = varQual_RDR  pREL_BASE_Name SLIT("/=")
434 le_RDR             = varQual_RDR  pREL_BASE_Name SLIT("<=")
435 lt_RDR             = varQual_RDR  pREL_BASE_Name SLIT("<")
436 gt_RDR             = varQual_RDR  pREL_BASE_Name SLIT(">")
437 ltTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("LT")
438 eqTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("EQ")
439 gtTag_RDR          = dataQual_RDR pREL_BASE_Name SLIT("GT")
440 max_RDR            = varQual_RDR  pREL_BASE_Name SLIT("max")
441 min_RDR            = varQual_RDR  pREL_BASE_Name SLIT("min")
442 compare_RDR        = varQual_RDR  pREL_BASE_Name SLIT("compare")
443 showList_RDR       = varQual_RDR  pREL_SHOW_Name SLIT("showList")
444 showList___RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showList__")
445 showsPrec_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showsPrec")
446 showSpace_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showSpace")
447 showString_RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showString")
448 showParen_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showParen")
449 readsPrec_RDR      = varQual_RDR  pREL_READ_Name SLIT("readsPrec")
450 readList_RDR       = varQual_RDR  pREL_READ_Name SLIT("readList")
451 readParen_RDR      = varQual_RDR  pREL_READ_Name SLIT("readParen")
452 lex_RDR            = varQual_RDR  pREL_READ_Name SLIT("lex")
453 readList___RDR     = varQual_RDR  pREL_READ_Name SLIT("readList__")
454 times_RDR          = varQual_RDR  pREL_NUM_Name SLIT("*")
455 plus_RDR           = varQual_RDR  pREL_NUM_Name SLIT("+")
456 negate_RDR         = varQual_RDR  pREL_NUM_Name SLIT("negate")
457 range_RDR          = varQual_RDR  pREL_ARR_Name SLIT("range")
458 index_RDR          = varQual_RDR  pREL_ARR_Name SLIT("index")
459 inRange_RDR        = varQual_RDR  pREL_ARR_Name SLIT("inRange")
460 succ_RDR           = varQual_RDR  pREL_ENUM_Name SLIT("succ")
461 pred_RDR           = varQual_RDR  pREL_ENUM_Name SLIT("pred")
462 minBound_RDR       = varQual_RDR  pREL_ENUM_Name SLIT("minBound")
463 maxBound_RDR       = varQual_RDR  pREL_ENUM_Name SLIT("maxBound")
464 assertErr_RDR      = varQual_RDR  pREL_ERR_Name SLIT("assertError")
465 \end{code}
466
467 %************************************************************************
468 %*                                                                      *
469 \subsection{Local helpers}
470 %*                                                                      *
471 %************************************************************************
472
473 \begin{code}
474 varQual  mod str uq = mkKnownKeyGlobal (mkPreludeQual varName mod str) uq
475 dataQual mod str uq = mkKnownKeyGlobal (mkPreludeQual dataName mod str) uq
476 tcQual   mod str uq = mkKnownKeyGlobal (mkPreludeQual tcName mod str) uq
477 clsQual  mod str uq = mkKnownKeyGlobal (mkPreludeQual clsName mod str) uq
478
479 varQual_RDR  mod str = mkPreludeQual varName mod str
480 dataQual_RDR mod str = mkPreludeQual dataName mod str
481 \end{code}
482
483 %************************************************************************
484 %*                                                                      *
485 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
486 %*                                                                      *
487 %************************************************************************
488
489 \begin{code}
490 boundedClassKey         = mkPreludeClassUnique 1 
491 enumClassKey            = mkPreludeClassUnique 2 
492 eqClassKey              = mkPreludeClassUnique 3 
493 floatingClassKey        = mkPreludeClassUnique 5 
494 fractionalClassKey      = mkPreludeClassUnique 6 
495 integralClassKey        = mkPreludeClassUnique 7 
496 monadClassKey           = mkPreludeClassUnique 8 
497 monadPlusClassKey       = mkPreludeClassUnique 9
498 functorClassKey         = mkPreludeClassUnique 10
499 numClassKey             = mkPreludeClassUnique 11
500 ordClassKey             = mkPreludeClassUnique 12
501 readClassKey            = mkPreludeClassUnique 13
502 realClassKey            = mkPreludeClassUnique 14
503 realFloatClassKey       = mkPreludeClassUnique 15
504 realFracClassKey        = mkPreludeClassUnique 16
505 showClassKey            = mkPreludeClassUnique 17
506                                                
507 cCallableClassKey       = mkPreludeClassUnique 18
508 cReturnableClassKey     = mkPreludeClassUnique 19
509
510 ixClassKey              = mkPreludeClassUnique 20
511 \end{code}
512
513 %************************************************************************
514 %*                                                                      *
515 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
516 %*                                                                      *
517 %************************************************************************
518
519 \begin{code}
520 addrPrimTyConKey                        = mkPreludeTyConUnique  1
521 addrTyConKey                            = mkPreludeTyConUnique  2
522 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
523 boolTyConKey                            = mkPreludeTyConUnique  4
524 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
525 charPrimTyConKey                        = mkPreludeTyConUnique  7
526 charTyConKey                            = mkPreludeTyConUnique  8
527 doublePrimTyConKey                      = mkPreludeTyConUnique  9
528 doubleTyConKey                          = mkPreludeTyConUnique 10 
529 floatPrimTyConKey                       = mkPreludeTyConUnique 11
530 floatTyConKey                           = mkPreludeTyConUnique 12
531 funTyConKey                             = mkPreludeTyConUnique 13
532 intPrimTyConKey                         = mkPreludeTyConUnique 14
533 intTyConKey                             = mkPreludeTyConUnique 15
534 int8TyConKey                            = mkPreludeTyConUnique 16
535 int16TyConKey                           = mkPreludeTyConUnique 17
536 int32TyConKey                           = mkPreludeTyConUnique 18
537 int64PrimTyConKey                       = mkPreludeTyConUnique 19
538 int64TyConKey                           = mkPreludeTyConUnique 20
539 integerTyConKey                         = mkPreludeTyConUnique 21
540 listTyConKey                            = mkPreludeTyConUnique 22
541 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 23
542 foreignObjTyConKey                      = mkPreludeTyConUnique 24
543 weakPrimTyConKey                        = mkPreludeTyConUnique 25
544 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 26
545 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 27
546 orderingTyConKey                        = mkPreludeTyConUnique 28
547 mVarPrimTyConKey                        = mkPreludeTyConUnique 29
548 ratioTyConKey                           = mkPreludeTyConUnique 30
549 rationalTyConKey                        = mkPreludeTyConUnique 31
550 realWorldTyConKey                       = mkPreludeTyConUnique 32
551 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 33
552 stablePtrTyConKey                       = mkPreludeTyConUnique 34
553 statePrimTyConKey                       = mkPreludeTyConUnique 35
554 stableNamePrimTyConKey                  = mkPreludeTyConUnique 50
555 stableNameTyConKey                      = mkPreludeTyConUnique 51
556 mutableByteArrayTyConKey                = mkPreludeTyConUnique 52
557 mutVarPrimTyConKey                      = mkPreludeTyConUnique 53
558 ioTyConKey                              = mkPreludeTyConUnique 55
559 byteArrayTyConKey                       = mkPreludeTyConUnique 56
560 wordPrimTyConKey                        = mkPreludeTyConUnique 57
561 wordTyConKey                            = mkPreludeTyConUnique 58
562 word8TyConKey                           = mkPreludeTyConUnique 59
563 word16TyConKey                          = mkPreludeTyConUnique 60
564 word32TyConKey                          = mkPreludeTyConUnique 61
565 word64PrimTyConKey                      = mkPreludeTyConUnique 62
566 word64TyConKey                          = mkPreludeTyConUnique 63
567 boxedConKey                             = mkPreludeTyConUnique 64
568 unboxedConKey                           = mkPreludeTyConUnique 65
569 anyBoxConKey                            = mkPreludeTyConUnique 66
570 kindConKey                              = mkPreludeTyConUnique 67
571 boxityConKey                            = mkPreludeTyConUnique 68
572 typeConKey                              = mkPreludeTyConUnique 69
573 threadIdPrimTyConKey                    = mkPreludeTyConUnique 70
574 bcoPrimTyConKey                         = mkPreludeTyConUnique 71
575
576 -- Generic Type Constructors
577 crossTyConKey                           = mkPreludeTyConUnique 72
578 plusTyConKey                            = mkPreludeTyConUnique 73
579 genUnitTyConKey                         = mkPreludeTyConUnique 74
580 \end{code}
581
582 %************************************************************************
583 %*                                                                      *
584 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
585 %*                                                                      *
586 %************************************************************************
587
588 \begin{code}
589 addrDataConKey                          = mkPreludeDataConUnique  0
590 charDataConKey                          = mkPreludeDataConUnique  1
591 consDataConKey                          = mkPreludeDataConUnique  2
592 doubleDataConKey                        = mkPreludeDataConUnique  3
593 falseDataConKey                         = mkPreludeDataConUnique  4
594 floatDataConKey                         = mkPreludeDataConUnique  5
595 intDataConKey                           = mkPreludeDataConUnique  6
596 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
597 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
598 foreignObjDataConKey                    = mkPreludeDataConUnique  9
599 nilDataConKey                           = mkPreludeDataConUnique 10
600 ratioDataConKey                         = mkPreludeDataConUnique 11
601 stablePtrDataConKey                     = mkPreludeDataConUnique 12
602 stableNameDataConKey                    = mkPreludeDataConUnique 13
603 trueDataConKey                          = mkPreludeDataConUnique 14
604 wordDataConKey                          = mkPreludeDataConUnique 15
605 ioDataConKey                            = mkPreludeDataConUnique 16
606
607 -- Generic data constructors
608 crossDataConKey                         = mkPreludeDataConUnique 17
609 inlDataConKey                           = mkPreludeDataConUnique 18
610 inrDataConKey                           = mkPreludeDataConUnique 19
611 genUnitDataConKey                       = mkPreludeDataConUnique 20
612 \end{code}
613
614 %************************************************************************
615 %*                                                                      *
616 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
617 %*                                                                      *
618 %************************************************************************
619
620 \begin{code}
621 absentErrorIdKey              = mkPreludeMiscIdUnique  1
622 appendIdKey                   = mkPreludeMiscIdUnique  2
623 augmentIdKey                  = mkPreludeMiscIdUnique  3
624 buildIdKey                    = mkPreludeMiscIdUnique  4
625 errorIdKey                    = mkPreludeMiscIdUnique  5
626 foldlIdKey                    = mkPreludeMiscIdUnique  6
627 foldrIdKey                    = mkPreludeMiscIdUnique  7
628 recSelErrIdKey                = mkPreludeMiscIdUnique  8
629 integerMinusOneIdKey          = mkPreludeMiscIdUnique  9
630 integerPlusOneIdKey           = mkPreludeMiscIdUnique 10
631 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 11
632 integerZeroIdKey              = mkPreludeMiscIdUnique 12
633 int2IntegerIdKey              = mkPreludeMiscIdUnique 13
634 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 15
635 eqStringIdKey                 = mkPreludeMiscIdUnique 16
636 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
637 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
638 parErrorIdKey                 = mkPreludeMiscIdUnique 20
639 parIdKey                      = mkPreludeMiscIdUnique 21
640 patErrorIdKey                 = mkPreludeMiscIdUnique 22
641 realWorldPrimIdKey            = mkPreludeMiscIdUnique 23
642 recConErrorIdKey              = mkPreludeMiscIdUnique 24
643 recUpdErrorIdKey              = mkPreludeMiscIdUnique 25
644 traceIdKey                    = mkPreludeMiscIdUnique 26
645 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 27
646 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 28
647 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 29
648 unpackCStringIdKey            = mkPreludeMiscIdUnique 30
649 ushowListIdKey                = mkPreludeMiscIdUnique 31
650 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
651 concatIdKey                   = mkPreludeMiscIdUnique 33
652 filterIdKey                   = mkPreludeMiscIdUnique 34
653 zipIdKey                      = mkPreludeMiscIdUnique 35
654 bindIOIdKey                   = mkPreludeMiscIdUnique 36
655 returnIOIdKey                 = mkPreludeMiscIdUnique 37
656 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
657 makeStablePtrIdKey            = mkPreludeMiscIdUnique 39
658 getTagIdKey                   = mkPreludeMiscIdUnique 40
659 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
660 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
661 \end{code}
662
663 Certain class operations from Prelude classes.  They get their own
664 uniques so we can look them up easily when we want to conjure them up
665 during type checking.
666
667 \begin{code}
668 fromIntClassOpKey             = mkPreludeMiscIdUnique 101
669 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
670 minusClassOpKey               = mkPreludeMiscIdUnique 103
671 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
672 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
673 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
674 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
675 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
676 eqClassOpKey                  = mkPreludeMiscIdUnique 109
677 geClassOpKey                  = mkPreludeMiscIdUnique 110
678 failMClassOpKey               = mkPreludeMiscIdUnique 112
679 thenMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
680         -- Just a place holder for  unbound variables  produced by the renamer:
681 unboundKey                    = mkPreludeMiscIdUnique 114 
682 fromEnumClassOpKey            = mkPreludeMiscIdUnique 115
683                               
684 mainKey                       = mkPreludeMiscIdUnique 116
685 returnMClassOpKey             = mkPreludeMiscIdUnique 117
686 otherwiseIdKey                = mkPreludeMiscIdUnique 118
687 toEnumClassOpKey              = mkPreludeMiscIdUnique 119
688 mapIdKey                      = mkPreludeMiscIdUnique 120
689 \end{code}
690
691 \begin{code}
692 assertIdKey                   = mkPreludeMiscIdUnique 121
693 runSTRepIdKey                 = mkPreludeMiscIdUnique 122
694 \end{code}
695
696
697 %************************************************************************
698 %*                                                                      *
699 \subsection{Standard groups of types}
700 %*                                                                      *
701 %************************************************************************
702
703 \begin{code}
704 numericTyKeys = 
705         [ addrTyConKey
706         , wordTyConKey
707         , intTyConKey
708         , integerTyConKey
709         , doubleTyConKey
710         , floatTyConKey
711         ]
712
713         -- Renamer always imports these data decls replete with constructors
714         -- so that desugarer can always see their constructors.  Ugh!
715 cCallishTyKeys = 
716         [ addrTyConKey
717         , wordTyConKey
718         , byteArrayTyConKey
719         , mutableByteArrayTyConKey
720         , foreignObjTyConKey
721         , stablePtrTyConKey
722         , int8TyConKey
723         , int16TyConKey
724         , int32TyConKey
725         , int64TyConKey
726         , word8TyConKey
727         , word16TyConKey
728         , word32TyConKey
729         , word64TyConKey
730         ]
731 \end{code}
732
733
734 %************************************************************************
735 %*                                                                      *
736 \subsection[Class-std-groups]{Standard groups of Prelude classes}
737 %*                                                                      *
738 %************************************************************************
739
740 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
741 (@TcDeriv@).
742
743 @derivingOccurrences@ maps a class name to a list of the (qualified)
744 occurrences that will be mentioned by the derived code for the class
745 when it is later generated.  We don't need to put in things that are
746 WiredIn (because they are already mapped to their correct name by the
747 @NameSupply@.  The class itself, and all its class ops, is already
748 flagged as an occurrence so we don't need to mention that either.
749
750 @derivingOccurrences@ has an item for every derivable class, even if
751 that item is empty, because we treat lookup failure as indicating that
752 the class is illegal in a deriving clause.
753
754 \begin{code}
755 derivingOccurrences :: UniqFM [RdrName]
756 derivingOccurrences = listToUFM deriving_occ_info
757
758 derivableClassKeys  = map fst deriving_occ_info
759
760 deriving_occ_info
761   = [ (eqClassKey,      [intTyCon_RDR, and_RDR, not_RDR])
762     , (ordClassKey,     [intTyCon_RDR, compose_RDR, eqTag_RDR])
763                                 -- EQ (from Ordering) is needed to force in the constructors
764                                 -- as well as the type constructor.
765     , (enumClassKey,    [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
766                                 -- The last two Enum deps are only used to produce better
767                                 -- error msgs for derived toEnum methods.
768     , (boundedClassKey, [intTyCon_RDR])
769     , (showClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, 
770                          showParen_RDR, showSpace_RDR, showList___RDR])
771     , (readClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
772                          foldr_RDR, build_RDR,
773                              -- foldr and build required for list comprehension
774                              -- KSW 2000-06
775                          lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
776                              -- returnM (and the rest of the Monad class decl) 
777                              -- will be forced in as result of depending
778                              -- on thenM.   -- SOF 1/99
779     , (ixClassKey,      [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
780                          foldr_RDR, build_RDR,
781                              -- foldr and build required for list comprehension used
782                              -- with single constructor types  -- KSW 2000-06
783                          returnM_RDR, failM_RDR])
784                              -- the last two are needed to force returnM, thenM and failM
785                              -- in before typechecking the list(monad) comprehension
786                              -- generated for derived Ix instances (range method)
787                              -- of single constructor types.  -- SOF 8/97
788     ]
789         -- intTyCon: Practically any deriving needs Int, either for index calculations, 
790         --              or for taggery.
791         -- ordClass: really it's the methods that are actually used.
792         -- numClass: for Int literals
793
794 -- these RDR names also have known keys, so we need to get back the RDR names to
795 -- populate the occurrence list above.
796 ioTyCon_RDR             = nameRdrName ioTyConName
797 intTyCon_RDR            = nameRdrName intTyConName
798 eq_RDR                  = nameRdrName eqName
799 ge_RDR                  = nameRdrName geName
800 numClass_RDR            = nameRdrName numClassName
801 ordClass_RDR            = nameRdrName ordClassName
802 map_RDR                 = nameRdrName mapName
803 append_RDR              = nameRdrName appendName
804 foldr_RDR               = nameRdrName foldrName
805 build_RDR               = nameRdrName buildName
806 enumFromTo_RDR          = nameRdrName enumFromToName
807 returnM_RDR             = nameRdrName returnMName
808 thenM_RDR               = nameRdrName thenMName
809 failM_RDR               = nameRdrName failMName
810 false_RDR               = nameRdrName falseDataConName
811 true_RDR                = nameRdrName trueDataConName
812 error_RDR               = nameRdrName errorName
813 getTag_RDR              = nameRdrName getTagName
814 fromEnum_RDR            = nameRdrName fromEnumName
815 toEnum_RDR              = nameRdrName toEnumName
816 enumFrom_RDR            = nameRdrName enumFromName
817 mkInt_RDR               = nameRdrName intDataConName
818 enumFromThen_RDR        = nameRdrName enumFromThenName
819 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
820 ratioDataCon_RDR        = nameRdrName ratioDataConName
821 plusInteger_RDR         = nameRdrName plusIntegerName
822 timesInteger_RDR        = nameRdrName timesIntegerName
823 enumClass_RDR           = nameRdrName enumClassName
824 monadClass_RDR          = nameRdrName monadClassName
825 ioDataCon_RDR           = nameRdrName ioDataConName
826 cCallableClass_RDR      = nameRdrName cCallableClassName
827 cReturnableClass_RDR    = nameRdrName cReturnableClassName
828 eqClass_RDR             = nameRdrName eqClassName
829 eqString_RDR            = nameRdrName eqStringName
830 \end{code}
831
832
833 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
834 even though every numeric class has these two as a superclass,
835 because the list of ambiguous dictionaries hasn't been simplified.
836
837 \begin{code}
838 numericClassKeys =
839         [ numClassKey
840         , realClassKey
841         , integralClassKey
842         ]
843         ++ fractionalClassKeys
844
845 fractionalClassKeys = 
846         [ fractionalClassKey
847         , floatingClassKey
848         , realFracClassKey
849         , realFloatClassKey
850         ]
851
852         -- the strictness analyser needs to know about numeric types
853         -- (see SaAbsInt.lhs)
854 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
855         [ readClassKey
856         ]
857
858 cCallishClassKeys = 
859         [ cCallableClassKey
860         , cReturnableClassKey
861         ]
862
863 standardClassKeys
864   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
865     --
866     -- We have to have "CCallable" and "CReturnable" in the standard
867     -- classes, so that if you go...
868     --
869     --      _ccall_ foo ... 93{-numeric literal-} ...
870     --
871     -- ... it can do The Right Thing on the 93.
872
873 noDictClassKeys         -- These classes are used only for type annotations;
874                         -- they are not implemented by dictionaries, ever.
875   = cCallishClassKeys
876 \end{code}
877
878 \begin{code}
879 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
880 -- during compiler debugging.
881 mkUnboundName :: RdrName -> Name
882 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
883
884 isUnboundName :: Name -> Bool
885 isUnboundName name = name `hasKey` unboundKey
886 \end{code}