[project @ 2002-03-04 17:20:46 by simonmar]
[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, mkHomeModule, mkModuleName )
40 import OccName    ( NameSpace, UserFS, varName, dataName, tcName, clsName, 
41                     mkKindOccFS, mkOccFS
42                   )
43 import RdrName    ( RdrName, mkOrig, mkUnqual )
44 import UniqFM
45 import Unique     ( Unique, Uniquable(..), hasKey,
46                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
47                     mkPreludeTyConUnique, mkPreludeClassUnique,
48                     mkTupleTyConUnique
49                   ) 
50 import BasicTypes ( Boxity(..), Arity )
51 import UniqFM     ( UniqFM, listToUFM )
52 import Name       ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
53 import RdrName    ( rdrNameOcc )
54 import SrcLoc     ( builtinSrcLoc, noSrcLoc )
55 import Util       ( nOfThem )
56 import Panic      ( panic )
57 \end{code}
58
59
60 %************************************************************************
61 %*                                                                      *
62 \subsection{Local Names}
63 %*                                                                      *
64 %************************************************************************
65
66 This *local* name is used by the interactive stuff
67
68 \begin{code}
69 itName uniq = mkLocalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
70 \end{code}
71
72 \begin{code}
73 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
74 -- during compiler debugging.
75 mkUnboundName :: RdrName -> Name
76 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
77
78 isUnboundName :: Name -> Bool
79 isUnboundName name = name `hasKey` unboundKey
80 \end{code}
81
82
83 %************************************************************************
84 %*                                                                      *
85 \subsection{Known key Names}
86 %*                                                                      *
87 %************************************************************************
88
89 This section tells what the compiler knows about the assocation of
90 names with uniques.  These ones are the *non* wired-in ones.  The
91 wired in ones are defined in TysWiredIn etc.
92
93 \begin{code}
94 knownKeyNames :: [Name]
95 knownKeyNames
96  =  [
97         -- Type constructors (synonyms especially)
98         ioTyConName, ioDataConName,
99         runMainName,
100         orderingTyConName,
101         rationalTyConName,
102         ratioDataConName,
103         ratioTyConName,
104         byteArrayTyConName,
105         mutableByteArrayTyConName,
106         foreignObjTyConName,
107         foreignPtrTyConName,
108         bcoPrimTyConName,
109         stablePtrTyConName,
110         stablePtrDataConName,
111
112         --  Classes.  *Must* include:
113         --      classes that are grabbed by key (e.g., eqClassKey)
114         --      classes in "Class.standardClassKeys" (quite a few)
115         eqClassName,                    -- mentioned, derivable
116         ordClassName,                   -- derivable
117         boundedClassName,               -- derivable
118         numClassName,                   -- mentioned, numeric
119         enumClassName,                  -- derivable
120         monadClassName,
121         functorClassName,
122         showClassName,                  -- derivable
123         realClassName,                  -- numeric
124         integralClassName,              -- numeric
125         fractionalClassName,            -- numeric
126         floatingClassName,              -- numeric
127         realFracClassName,              -- numeric
128         realFloatClassName,             -- numeric
129         readClassName,                  -- derivable
130         ixClassName,                    -- derivable (but it isn't Prelude.Ix; hmmm)
131         cCallableClassName,             -- mentioned, ccallish
132         cReturnableClassName,           -- mentioned, ccallish
133
134         -- ClassOps 
135         fromIntegerName,
136         negateName,
137         geName,
138         minusName,
139         enumFromName,
140         enumFromThenName,
141         enumFromToName,
142         enumFromThenToName,
143         fromEnumName,
144         toEnumName,
145         eqName,
146         thenMName,
147         returnMName,
148         failMName,
149         fromRationalName,
150
151         -- not class methods, but overloaded (for parallel arrays)
152         enumFromToPName,
153         enumFromThenToPName,
154
155         deRefStablePtrName,
156         newStablePtrName,
157         bindIOName,
158         returnIOName,
159         failIOName,
160
161         -- Strings and lists
162         mapName,
163         appendName,
164         unpackCStringName,
165         unpackCStringAppendName,
166         unpackCStringFoldrName,
167         unpackCStringUtf8Name,
168
169         -- List operations
170         concatName,
171         filterName,
172         zipName,
173         foldrName,
174         buildName,
175         augmentName,
176
177         -- Parallel array operations
178         nullPName,
179         lengthPName,
180         replicatePName,
181         mapPName,
182         filterPName,
183         zipPName,
184         crossPName,
185         indexPName,
186         toPName,
187         bpermutePName,
188         bpermuteDftPName,
189         indexOfPName,
190
191         -- FFI primitive types that are not wired-in.
192         int8TyConName,
193         int16TyConName,
194         int32TyConName,
195         int64TyConName,
196         word8TyConName,
197         word16TyConName,
198         word32TyConName,
199         word64TyConName,
200
201         -- Others
202         unsafeCoerceName,
203         otherwiseIdName,
204         plusIntegerName,
205         timesIntegerName,
206         eqStringName,
207         assertName,
208         runSTRepName,
209         printName,
210         splitName, fstName, sndName,    -- Used by splittery
211
212         -- Others (needed for flattening and not mentioned before)
213         andName,
214         orName
215     ]
216 \end{code}
217
218
219 %************************************************************************
220 %*                                                                      *
221 \subsection{Module names}
222 %*                                                                      *
223 %************************************************************************
224
225 \begin{code}
226 pRELUDE_Name      = mkModuleName "Prelude"
227 pREL_GHC_Name     = mkModuleName "GHC.Prim"        -- Primitive types and values
228 pREL_BASE_Name    = mkModuleName "GHC.Base"
229 pREL_ENUM_Name    = mkModuleName "GHC.Enum"
230 pREL_SHOW_Name    = mkModuleName "GHC.Show"
231 pREL_READ_Name    = mkModuleName "GHC.Read"
232 pREL_NUM_Name     = mkModuleName "GHC.Num"
233 pREL_LIST_Name    = mkModuleName "GHC.List"
234 pREL_PARR_Name    = mkModuleName "GHC.PArr"
235 pREL_TUP_Name     = mkModuleName "Data.Tuple"
236 pREL_PACK_Name    = mkModuleName "GHC.Pack"
237 pREL_CONC_Name    = mkModuleName "GHC.Conc"
238 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
239 pREL_ST_Name      = mkModuleName "GHC.ST"
240 pREL_ARR_Name     = mkModuleName "GHC.Arr"
241 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
242 fOREIGN_PTR_Name  = mkModuleName "Foreign.ForeignPtr"
243 pREL_STABLE_Name  = mkModuleName "GHC.Stable"
244 pREL_SPLIT_Name   = mkModuleName "GHC.Split"
245 pREL_ADDR_Name    = mkModuleName "GHC.Addr"
246 pREL_PTR_Name     = mkModuleName "GHC.Ptr"
247 pREL_ERR_Name     = mkModuleName "GHC.Err"
248 pREL_REAL_Name    = mkModuleName "GHC.Real"
249 pREL_FLOAT_Name   = mkModuleName "GHC.Float"
250 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
251 sYSTEM_IO_Name    = mkModuleName "System.IO"
252
253 mAIN_Name         = mkModuleName "Main"
254 pREL_INT_Name     = mkModuleName "GHC.Int"
255 pREL_WORD_Name    = mkModuleName "GHC.Word"
256
257 fOREIGNOBJ_Name   = mkModuleName "ForeignObj"
258 aDDR_Name         = mkModuleName "Addr"
259
260 gLA_EXTS_Name   = mkModuleName "GlaExts"
261
262 pREL_GHC        = mkPrelModule pREL_GHC_Name
263 pREL_BASE       = mkPrelModule pREL_BASE_Name
264 pREL_ADDR       = mkPrelModule pREL_ADDR_Name
265 pREL_PTR        = mkPrelModule pREL_PTR_Name
266 pREL_STABLE     = mkPrelModule pREL_STABLE_Name
267 pREL_IO_BASE    = mkPrelModule pREL_IO_BASE_Name
268 pREL_PACK       = mkPrelModule pREL_PACK_Name
269 pREL_ERR        = mkPrelModule pREL_ERR_Name
270 pREL_NUM        = mkPrelModule pREL_NUM_Name
271 pREL_REAL       = mkPrelModule pREL_REAL_Name
272 pREL_FLOAT      = mkPrelModule pREL_FLOAT_Name
273 pRELUDE         = mkPrelModule pRELUDE_Name
274
275 iNTERACTIVE     = mkHomeModule (mkModuleName "$Interactive")
276 \end{code}
277
278 %************************************************************************
279 %*                                                                      *
280 \subsection{Constructing the names of tuples
281 %*                                                                      *
282 %************************************************************************
283
284 \begin{code}
285 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
286
287 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
288 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
289 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
290 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
291 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
292 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
293
294 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
295 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
296 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
297 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
298 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
299 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
300
301 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
302 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
303                                           (mod, occ) -> mkOrig space mod occ
304 \end{code}
305
306
307 %************************************************************************
308 %*                                                                      *
309 \subsection{Unqualified RdrNames}
310 %*                                                                      *
311 %************************************************************************
312
313 \begin{code}
314 main_RDR_Unqual :: RdrName
315 main_RDR_Unqual = mkUnqual varName FSLIT("main")
316 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
317 -- gets an Orig RdrName, and we want a Qual or Unqual one.  An Unqual
318 -- one will do fine.
319 \end{code}
320
321
322 %************************************************************************
323 %*                                                                      *
324 \subsection{Commonly-used RdrNames}
325 %*                                                                      *
326 %************************************************************************
327
328 Many of these Names are not really "built in", but some parts of the
329 compiler (notably the deriving mechanism) need to mention their names,
330 and it's convenient to write them all down in one place.
331
332 \begin{code}
333 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
334 runMainName    = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey
335
336 -- Stuff from PrelGHC
337 usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
338 usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
339 superKindName    = kindQual FSLIT("KX") kindConKey
340 superBoxityName  = kindQual FSLIT("BX") boxityConKey
341 liftedConName    = kindQual FSLIT("*") liftedConKey
342 unliftedConName  = kindQual FSLIT("#") unliftedConKey
343 openKindConName  = kindQual FSLIT("?") anyBoxConKey
344 usageKindConName = kindQual FSLIT("$") usageConKey
345 typeConName      = kindQual FSLIT("Type") typeConKey
346
347 funTyConName                  = tcQual  pREL_GHC_Name FSLIT("(->)")  funTyConKey
348 charPrimTyConName             = tcQual  pREL_GHC_Name FSLIT("Char#") charPrimTyConKey 
349 intPrimTyConName              = tcQual  pREL_GHC_Name FSLIT("Int#") intPrimTyConKey 
350 int32PrimTyConName            = tcQual  pREL_GHC_Name FSLIT("Int32#") int32PrimTyConKey 
351 int64PrimTyConName            = tcQual  pREL_GHC_Name FSLIT("Int64#") int64PrimTyConKey 
352 wordPrimTyConName             = tcQual  pREL_GHC_Name FSLIT("Word#") wordPrimTyConKey 
353 word32PrimTyConName           = tcQual  pREL_GHC_Name FSLIT("Word32#") word32PrimTyConKey 
354 word64PrimTyConName           = tcQual  pREL_GHC_Name FSLIT("Word64#") word64PrimTyConKey 
355 addrPrimTyConName             = tcQual  pREL_GHC_Name FSLIT("Addr#") addrPrimTyConKey 
356 floatPrimTyConName            = tcQual  pREL_GHC_Name FSLIT("Float#") floatPrimTyConKey 
357 doublePrimTyConName           = tcQual  pREL_GHC_Name FSLIT("Double#") doublePrimTyConKey 
358 statePrimTyConName            = tcQual  pREL_GHC_Name FSLIT("State#") statePrimTyConKey 
359 realWorldTyConName            = tcQual  pREL_GHC_Name FSLIT("RealWorld") realWorldTyConKey 
360 arrayPrimTyConName            = tcQual  pREL_GHC_Name FSLIT("Array#") arrayPrimTyConKey 
361 byteArrayPrimTyConName        = tcQual  pREL_GHC_Name FSLIT("ByteArray#") byteArrayPrimTyConKey 
362 mutableArrayPrimTyConName     = tcQual  pREL_GHC_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey 
363 mutableByteArrayPrimTyConName = tcQual  pREL_GHC_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
364 mutVarPrimTyConName           = tcQual  pREL_GHC_Name FSLIT("MutVar#") mutVarPrimTyConKey 
365 mVarPrimTyConName             = tcQual  pREL_GHC_Name FSLIT("MVar#") mVarPrimTyConKey 
366 stablePtrPrimTyConName        = tcQual  pREL_GHC_Name FSLIT("StablePtr#") stablePtrPrimTyConKey 
367 stableNamePrimTyConName       = tcQual  pREL_GHC_Name FSLIT("StableName#") stableNamePrimTyConKey 
368 foreignObjPrimTyConName       = tcQual  pREL_GHC_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey 
369 bcoPrimTyConName              = tcQual  pREL_GHC_Name FSLIT("BCO#") bcoPrimTyConKey 
370 weakPrimTyConName             = tcQual  pREL_GHC_Name FSLIT("Weak#") weakPrimTyConKey 
371 threadIdPrimTyConName         = tcQual  pREL_GHC_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
372 cCallableClassName            = clsQual pREL_GHC_Name FSLIT("CCallable") cCallableClassKey
373 cReturnableClassName          = clsQual pREL_GHC_Name FSLIT("CReturnable") cReturnableClassKey
374
375 -- PrelBase data types and constructors
376 charTyConName     = tcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
377 charDataConName   = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey
378 intTyConName      = tcQual   pREL_BASE_Name FSLIT("Int") intTyConKey
379 intDataConName    = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey
380 orderingTyConName = tcQual   pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
381 boolTyConName     = tcQual   pREL_BASE_Name FSLIT("Bool") boolTyConKey
382 falseDataConName  = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey
383 trueDataConName   = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey
384 listTyConName     = tcQual   pREL_BASE_Name FSLIT("[]") listTyConKey
385 nilDataConName    = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
386 consDataConName   = dataQual pREL_BASE_Name FSLIT(":") consDataConKey
387
388 -- PrelTup
389 fstName           = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
390 sndName           = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
391
392 -- Generics
393 crossTyConName     = tcQual   pREL_BASE_Name FSLIT(":*:") crossTyConKey
394 crossDataConName   = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
395 plusTyConName      = tcQual   pREL_BASE_Name FSLIT(":+:") plusTyConKey
396 inlDataConName     = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
397 inrDataConName     = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
398 genUnitTyConName   = tcQual   pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
399 genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
400
401 -- Random PrelBase functions
402 unsafeCoerceName  = varQual pREL_BASE_Name FSLIT("unsafeCoerce") 
403                                                              unsafeCoerceIdKey
404 otherwiseIdName   = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
405 appendName        = varQual pREL_BASE_Name FSLIT("++")       appendIdKey
406 foldrName         = varQual pREL_BASE_Name FSLIT("foldr")     foldrIdKey
407 mapName           = varQual pREL_BASE_Name FSLIT("map")      mapIdKey
408 buildName         = varQual pREL_BASE_Name FSLIT("build")     buildIdKey
409 augmentName       = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
410 eqStringName      = varQual pREL_BASE_Name FSLIT("eqString")  eqStringIdKey
411 andName           = varQual pREL_BASE_Name FSLIT("&&")       andIdKey
412 orName            = varQual pREL_BASE_Name FSLIT("||")       orIdKey
413
414 -- Strings
415 unpackCStringName       = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
416 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
417 unpackCStringFoldrName  = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
418 unpackCStringUtf8Name   = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
419
420 -- Classes Eq and Ord
421 eqClassName       = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
422 ordClassName      = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
423 eqName            = varQual  pREL_BASE_Name FSLIT("==") eqClassOpKey
424 geName            = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
425
426 -- Class Monad
427 monadClassName     = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
428 thenMName          = varQual pREL_BASE_Name FSLIT(">>=") thenMClassOpKey
429 returnMName        = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
430 failMName          = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
431
432 -- Class Functor
433 functorClassName  = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
434
435 -- Class Show
436 showClassName     = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey
437
438 -- Class Read
439 readClassName     = clsQual pREL_READ_Name FSLIT("Read") readClassKey
440
441 -- Module PrelNum
442 numClassName      = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
443 fromIntegerName   = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
444 minusName         = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
445 negateName        = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
446 plusIntegerName   = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
447 timesIntegerName  = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
448 integerTyConName  = tcQual  pREL_NUM_Name FSLIT("Integer") integerTyConKey
449 smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
450 largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
451
452 -- PrelReal types and classes
453 rationalTyConName   = tcQual   pREL_REAL_Name  FSLIT("Rational") rationalTyConKey
454 ratioTyConName      = tcQual   pREL_REAL_Name  FSLIT("Ratio") ratioTyConKey
455 ratioDataConName    = dataQual pREL_REAL_Name  FSLIT(":%") ratioDataConKey
456 realClassName       = clsQual  pREL_REAL_Name  FSLIT("Real") realClassKey
457 integralClassName   = clsQual  pREL_REAL_Name  FSLIT("Integral") integralClassKey
458 realFracClassName   = clsQual  pREL_REAL_Name  FSLIT("RealFrac") realFracClassKey
459 fractionalClassName = clsQual  pREL_REAL_Name  FSLIT("Fractional") fractionalClassKey
460 fromRationalName    = varQual  pREL_REAL_Name  FSLIT("fromRational") fromRationalClassOpKey
461
462 -- PrelFloat classes
463 floatTyConName     = tcQual   pREL_FLOAT_Name FSLIT("Float") floatTyConKey
464 floatDataConName   = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
465 doubleTyConName    = tcQual   pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
466 doubleDataConName  = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
467 floatingClassName  = clsQual  pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
468 realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
469
470 -- Class Ix
471 ixClassName        = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
472
473 -- Class Enum
474 enumClassName      = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
475 toEnumName         = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey
476 fromEnumName       = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey
477 enumFromName       = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
478 enumFromToName     = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
479 enumFromThenName   = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
480 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
481
482 -- Overloaded via Class Enum
483 enumFromToPName    = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
484 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
485
486 -- Class Bounded
487 boundedClassName  = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
488
489 -- List functions
490 concatName        = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
491 filterName        = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
492 zipName           = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
493
494 -- parallel array types and functions
495 parrTyConName     = tcQual  pREL_PARR_Name FSLIT("[::]")       parrTyConKey
496 parrDataConName   = dataQual pREL_PARR_Name FSLIT("PArr")      parrDataConKey
497 nullPName         = varQual pREL_PARR_Name FSLIT("nullP")      nullPIdKey
498 lengthPName       = varQual pREL_PARR_Name FSLIT("lengthP")    lengthPIdKey
499 replicatePName    = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey
500 mapPName          = varQual pREL_PARR_Name FSLIT("mapP")       mapPIdKey
501 filterPName       = varQual pREL_PARR_Name FSLIT("filterP")    filterPIdKey
502 zipPName          = varQual pREL_PARR_Name FSLIT("zipP")       zipPIdKey
503 crossPName        = varQual pREL_PARR_Name FSLIT("crossP")     crossPIdKey
504 indexPName        = varQual pREL_PARR_Name FSLIT("!:")        indexPIdKey
505 toPName           = varQual pREL_PARR_Name FSLIT("toP")       toPIdKey
506 bpermutePName     = varQual pREL_PARR_Name FSLIT("bpermuteP")  bpermutePIdKey
507 bpermuteDftPName  = varQual pREL_PARR_Name FSLIT("bpermuteDftP") 
508                                                               bpermuteDftPIdKey
509 indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")   indexOfPIdKey
510
511 -- IOBase things
512 ioTyConName       = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
513 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
514 bindIOName        = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
515 returnIOName      = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
516 failIOName        = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
517
518 -- IO things
519 printName         = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
520
521 -- Int, Word, and Addr things
522 int8TyConName     = tcQual pREL_INT_Name  FSLIT("Int8") int8TyConKey
523 int16TyConName    = tcQual pREL_INT_Name  FSLIT("Int16") int16TyConKey
524 int32TyConName    = tcQual pREL_INT_Name  FSLIT("Int32") int32TyConKey
525 int64TyConName    = tcQual pREL_INT_Name  FSLIT("Int64") int64TyConKey
526
527 word8TyConName    = tcQual pREL_WORD_Name FSLIT("Word8")  word8TyConKey
528 word16TyConName   = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey
529 word32TyConName   = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey
530 word64TyConName   = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey
531
532 wordTyConName     = tcQual   pREL_WORD_Name FSLIT("Word")   wordTyConKey
533 wordDataConName   = dataQual pREL_WORD_Name FSLIT("W#")     wordDataConKey
534
535 addrTyConName     = tcQual   aDDR_Name FSLIT("Addr") addrTyConKey
536 addrDataConName   = dataQual aDDR_Name FSLIT("A#") addrDataConKey
537
538 ptrTyConName      = tcQual   pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
539 ptrDataConName    = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
540
541 funPtrTyConName   = tcQual   pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
542 funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
543
544 -- Byte array types
545 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  FSLIT("ByteArray") byteArrayTyConKey
546 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  FSLIT("MutableByteArray") mutableByteArrayTyConKey
547
548 -- Foreign objects and weak pointers
549 foreignObjTyConName   = tcQual   fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjTyConKey
550 foreignObjDataConName = dataQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjDataConKey
551 foreignPtrTyConName   = tcQual   fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrTyConKey
552 foreignPtrDataConName = dataQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrDataConKey
553 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
554 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
555 deRefStablePtrName    = varQual  pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
556 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
557
558 errorName          = varQual pREL_ERR_Name FSLIT("error") errorIdKey
559 assertName         = varQual pREL_GHC_Name FSLIT("assert") assertIdKey
560 getTagName         = varQual pREL_GHC_Name FSLIT("getTag#") getTagIdKey
561 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
562
563 -- The "split" Id for splittable implicit parameters
564 splitName          = varQual pREL_SPLIT_Name FSLIT("split") splitIdKey
565 \end{code}
566
567 %************************************************************************
568 %*                                                                      *
569 \subsection{Known names}
570 %*                                                                      *
571 %************************************************************************
572
573 The following names are known to the compiler, but they don't require
574 pre-assigned keys.  Mostly these names are used in generating deriving
575 code, which is passed through the renamer anyway.
576
577         THEY ARE ALL ORIGINAL NAMES, HOWEVER
578
579 \begin{code}
580 -- Lists and tuples
581 tupleCon_RDR, tupleTyCon_RDR            :: Int -> RdrName
582 ubxTupleCon_RDR, ubxTupleTyCon_RDR      :: Int -> RdrName
583
584 tupleCon_RDR      = mkTupConRdrName dataName Boxed  
585 tupleTyCon_RDR    = mkTupConRdrName tcName   Boxed  
586 ubxTupleCon_RDR   = mkTupConRdrName dataName Unboxed
587 ubxTupleTyCon_RDR = mkTupConRdrName tcName   Unboxed
588
589 unitCon_RDR       = dataQual_RDR pREL_BASE_Name FSLIT("()")
590 unitTyCon_RDR     = tcQual_RDR   pREL_BASE_Name FSLIT("()")
591
592 and_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("&&")
593 not_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("not")
594 compose_RDR        = varQual_RDR  pREL_BASE_Name FSLIT(".")
595 ne_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("/=")
596 le_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("<=")
597 lt_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("<")
598 gt_RDR             = varQual_RDR  pREL_BASE_Name FSLIT(">")
599 ltTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("LT")
600 eqTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
601 gtTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("GT")
602 max_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("max")
603 min_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("min")
604 compare_RDR        = varQual_RDR  pREL_BASE_Name FSLIT("compare")
605 showList_RDR       = varQual_RDR  pREL_SHOW_Name FSLIT("showList")
606 showList___RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showList__")
607 showsPrec_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showsPrec")
608 showSpace_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showSpace")
609 showString_RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showString")
610 showParen_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showParen")
611 readsPrec_RDR      = varQual_RDR  pREL_READ_Name FSLIT("readsPrec")
612 readList_RDR       = varQual_RDR  pREL_READ_Name FSLIT("readList")
613 readParen_RDR      = varQual_RDR  pREL_READ_Name FSLIT("readParen")
614 lex_RDR            = varQual_RDR  pREL_READ_Name FSLIT("lex")
615 readList___RDR     = varQual_RDR  pREL_READ_Name FSLIT("readList__")
616 times_RDR          = varQual_RDR  pREL_NUM_Name FSLIT("*")
617 plus_RDR           = varQual_RDR  pREL_NUM_Name FSLIT("+")
618 negate_RDR         = varQual_RDR  pREL_NUM_Name FSLIT("negate")
619 range_RDR          = varQual_RDR  pREL_ARR_Name FSLIT("range")
620 index_RDR          = varQual_RDR  pREL_ARR_Name FSLIT("index")
621 inRange_RDR        = varQual_RDR  pREL_ARR_Name FSLIT("inRange")
622 succ_RDR           = varQual_RDR  pREL_ENUM_Name FSLIT("succ")
623 pred_RDR           = varQual_RDR  pREL_ENUM_Name FSLIT("pred")
624 minBound_RDR       = varQual_RDR  pREL_ENUM_Name FSLIT("minBound")
625 maxBound_RDR       = varQual_RDR  pREL_ENUM_Name FSLIT("maxBound")
626 assertErr_RDR      = varQual_RDR  pREL_ERR_Name FSLIT("assertError")
627 \end{code}
628
629 These RDR names also have known keys, so we need to get back the RDR names to
630 populate the occurrence list above.
631
632 \begin{code}
633 funTyCon_RDR            = nameRdrName funTyConName
634 nilCon_RDR              = nameRdrName nilDataConName
635 listTyCon_RDR           = nameRdrName listTyConName
636 parrTyCon_RDR           = nameRdrName parrTyConName
637 ioTyCon_RDR             = nameRdrName ioTyConName
638 intTyCon_RDR            = nameRdrName intTyConName
639 eq_RDR                  = nameRdrName eqName
640 ge_RDR                  = nameRdrName geName
641 numClass_RDR            = nameRdrName numClassName
642 ordClass_RDR            = nameRdrName ordClassName
643 map_RDR                 = nameRdrName mapName
644 append_RDR              = nameRdrName appendName
645 foldr_RDR               = nameRdrName foldrName
646 build_RDR               = nameRdrName buildName
647 enumFromTo_RDR          = nameRdrName enumFromToName
648 returnM_RDR             = nameRdrName returnMName
649 thenM_RDR               = nameRdrName thenMName
650 failM_RDR               = nameRdrName failMName
651 false_RDR               = nameRdrName falseDataConName
652 true_RDR                = nameRdrName trueDataConName
653 error_RDR               = nameRdrName errorName
654 getTag_RDR              = nameRdrName getTagName
655 fromEnum_RDR            = nameRdrName fromEnumName
656 toEnum_RDR              = nameRdrName toEnumName
657 enumFrom_RDR            = nameRdrName enumFromName
658 mkInt_RDR               = nameRdrName intDataConName
659 enumFromThen_RDR        = nameRdrName enumFromThenName
660 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
661 ratioDataCon_RDR        = nameRdrName ratioDataConName
662 plusInteger_RDR         = nameRdrName plusIntegerName
663 timesInteger_RDR        = nameRdrName timesIntegerName
664 enumClass_RDR           = nameRdrName enumClassName
665 monadClass_RDR          = nameRdrName monadClassName
666 ioDataCon_RDR           = nameRdrName ioDataConName
667 cCallableClass_RDR      = nameRdrName cCallableClassName
668 cReturnableClass_RDR    = nameRdrName cReturnableClassName
669 eqClass_RDR             = nameRdrName eqClassName
670 eqString_RDR            = nameRdrName eqStringName
671 unpackCString_RDR       = nameRdrName unpackCStringName
672 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
673 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
674 deRefStablePtr_RDR      = nameRdrName deRefStablePtrName
675 newStablePtr_RDR        = nameRdrName newStablePtrName
676 bindIO_RDR              = nameRdrName bindIOName
677 returnIO_RDR            = nameRdrName returnIOName
678 fromInteger_RDR         = nameRdrName fromIntegerName
679 fromRational_RDR        = nameRdrName fromRationalName
680 minus_RDR               = nameRdrName minusName
681 \end{code}
682
683 %************************************************************************
684 %*                                                                      *
685 \subsection{Local helpers}
686 %*                                                                      *
687 %************************************************************************
688
689 All these are original names; hence mkOrig
690
691 \begin{code}
692 varQual  mod str uq = mkKnownKeyGlobal (varQual_RDR  mod str) uq
693 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
694 tcQual   mod str uq = mkKnownKeyGlobal (tcQual_RDR   mod str) uq
695 clsQual  mod str uq = mkKnownKeyGlobal (clsQual_RDR  mod str) uq
696
697 kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
698         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
699         -- And they don't come from any particular module; indeed we always
700         -- want to print them unqualified.  Hence the LocalName
701
702 varQual_RDR  mod str = mkOrig varName  mod str
703 tcQual_RDR   mod str = mkOrig tcName   mod str
704 clsQual_RDR  mod str = mkOrig clsName  mod str
705 dataQual_RDR mod str = mkOrig dataName mod str
706 \end{code}
707
708 %************************************************************************
709 %*                                                                      *
710 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
711 %*                                                                      *
712 %************************************************************************
713
714 \begin{code}
715 boundedClassKey         = mkPreludeClassUnique 1 
716 enumClassKey            = mkPreludeClassUnique 2 
717 eqClassKey              = mkPreludeClassUnique 3 
718 floatingClassKey        = mkPreludeClassUnique 5 
719 fractionalClassKey      = mkPreludeClassUnique 6 
720 integralClassKey        = mkPreludeClassUnique 7 
721 monadClassKey           = mkPreludeClassUnique 8 
722 functorClassKey         = mkPreludeClassUnique 10
723 numClassKey             = mkPreludeClassUnique 11
724 ordClassKey             = mkPreludeClassUnique 12
725 readClassKey            = mkPreludeClassUnique 13
726 realClassKey            = mkPreludeClassUnique 14
727 realFloatClassKey       = mkPreludeClassUnique 15
728 realFracClassKey        = mkPreludeClassUnique 16
729 showClassKey            = mkPreludeClassUnique 17
730
731 cCallableClassKey       = mkPreludeClassUnique 18
732 cReturnableClassKey     = mkPreludeClassUnique 19
733
734 ixClassKey              = mkPreludeClassUnique 20
735 \end{code}
736
737 %************************************************************************
738 %*                                                                      *
739 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
740 %*                                                                      *
741 %************************************************************************
742
743 \begin{code}
744 addrPrimTyConKey                        = mkPreludeTyConUnique  1
745 addrTyConKey                            = mkPreludeTyConUnique  2
746 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
747 boolTyConKey                            = mkPreludeTyConUnique  4
748 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
749 charPrimTyConKey                        = mkPreludeTyConUnique  7
750 charTyConKey                            = mkPreludeTyConUnique  8
751 doublePrimTyConKey                      = mkPreludeTyConUnique  9
752 doubleTyConKey                          = mkPreludeTyConUnique 10 
753 floatPrimTyConKey                       = mkPreludeTyConUnique 11
754 floatTyConKey                           = mkPreludeTyConUnique 12
755 funTyConKey                             = mkPreludeTyConUnique 13
756 intPrimTyConKey                         = mkPreludeTyConUnique 14
757 intTyConKey                             = mkPreludeTyConUnique 15
758 int8TyConKey                            = mkPreludeTyConUnique 16
759 int16TyConKey                           = mkPreludeTyConUnique 17
760 int32PrimTyConKey                       = mkPreludeTyConUnique 18
761 int32TyConKey                           = mkPreludeTyConUnique 19
762 int64PrimTyConKey                       = mkPreludeTyConUnique 20
763 int64TyConKey                           = mkPreludeTyConUnique 21
764 integerTyConKey                         = mkPreludeTyConUnique 22
765 listTyConKey                            = mkPreludeTyConUnique 23
766 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
767 foreignObjTyConKey                      = mkPreludeTyConUnique 25
768 foreignPtrTyConKey                      = mkPreludeTyConUnique 26
769 weakPrimTyConKey                        = mkPreludeTyConUnique 27
770 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
771 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
772 orderingTyConKey                        = mkPreludeTyConUnique 30
773 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
774 ratioTyConKey                           = mkPreludeTyConUnique 32
775 rationalTyConKey                        = mkPreludeTyConUnique 33
776 realWorldTyConKey                       = mkPreludeTyConUnique 34
777 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
778 stablePtrTyConKey                       = mkPreludeTyConUnique 36
779 statePrimTyConKey                       = mkPreludeTyConUnique 50
780 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
781 stableNameTyConKey                      = mkPreludeTyConUnique 52
782 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
783 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
784 ioTyConKey                              = mkPreludeTyConUnique 56
785 byteArrayTyConKey                       = mkPreludeTyConUnique 57
786 wordPrimTyConKey                        = mkPreludeTyConUnique 58
787 wordTyConKey                            = mkPreludeTyConUnique 59
788 word8TyConKey                           = mkPreludeTyConUnique 60
789 word16TyConKey                          = mkPreludeTyConUnique 61 
790 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
791 word32TyConKey                          = mkPreludeTyConUnique 63
792 word64PrimTyConKey                      = mkPreludeTyConUnique 64
793 word64TyConKey                          = mkPreludeTyConUnique 65
794 liftedConKey                            = mkPreludeTyConUnique 66
795 unliftedConKey                          = mkPreludeTyConUnique 67
796 anyBoxConKey                            = mkPreludeTyConUnique 68
797 kindConKey                              = mkPreludeTyConUnique 69
798 boxityConKey                            = mkPreludeTyConUnique 70
799 typeConKey                              = mkPreludeTyConUnique 71
800 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
801 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
802 ptrTyConKey                             = mkPreludeTyConUnique 74
803 funPtrTyConKey                          = mkPreludeTyConUnique 75
804
805 -- Usage type constructors
806 usageConKey                             = mkPreludeTyConUnique 76
807 usOnceTyConKey                          = mkPreludeTyConUnique 77
808 usManyTyConKey                          = mkPreludeTyConUnique 78
809
810 -- Generic Type Constructors
811 crossTyConKey                           = mkPreludeTyConUnique 79
812 plusTyConKey                            = mkPreludeTyConUnique 80
813 genUnitTyConKey                         = mkPreludeTyConUnique 81
814
815 -- Parallel array type constructor
816 parrTyConKey                            = mkPreludeTyConUnique 82
817
818 unitTyConKey = mkTupleTyConUnique Boxed 0
819 \end{code}
820
821 %************************************************************************
822 %*                                                                      *
823 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
824 %*                                                                      *
825 %************************************************************************
826
827 \begin{code}
828 addrDataConKey                          = mkPreludeDataConUnique  0
829 charDataConKey                          = mkPreludeDataConUnique  1
830 consDataConKey                          = mkPreludeDataConUnique  2
831 doubleDataConKey                        = mkPreludeDataConUnique  3
832 falseDataConKey                         = mkPreludeDataConUnique  4
833 floatDataConKey                         = mkPreludeDataConUnique  5
834 intDataConKey                           = mkPreludeDataConUnique  6
835 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
836 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
837 foreignObjDataConKey                    = mkPreludeDataConUnique  9
838 foreignPtrDataConKey                    = mkPreludeDataConUnique 10
839 nilDataConKey                           = mkPreludeDataConUnique 11
840 ratioDataConKey                         = mkPreludeDataConUnique 12
841 stablePtrDataConKey                     = mkPreludeDataConUnique 13
842 stableNameDataConKey                    = mkPreludeDataConUnique 14
843 trueDataConKey                          = mkPreludeDataConUnique 15
844 wordDataConKey                          = mkPreludeDataConUnique 16
845 ioDataConKey                            = mkPreludeDataConUnique 17
846 ptrDataConKey                           = mkPreludeDataConUnique 18
847 funPtrDataConKey                        = mkPreludeDataConUnique 19
848
849 -- Generic data constructors
850 crossDataConKey                         = mkPreludeDataConUnique 20
851 inlDataConKey                           = mkPreludeDataConUnique 21
852 inrDataConKey                           = mkPreludeDataConUnique 22
853 genUnitDataConKey                       = mkPreludeDataConUnique 23
854
855 -- Data constructor for parallel arrays
856 parrDataConKey                          = mkPreludeDataConUnique 24
857 \end{code}
858
859 %************************************************************************
860 %*                                                                      *
861 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
862 %*                                                                      *
863 %************************************************************************
864
865 \begin{code}
866 absentErrorIdKey              = mkPreludeMiscIdUnique  1
867 appendIdKey                   = mkPreludeMiscIdUnique  2
868 augmentIdKey                  = mkPreludeMiscIdUnique  3
869 buildIdKey                    = mkPreludeMiscIdUnique  4
870 errorIdKey                    = mkPreludeMiscIdUnique  5
871 foldlIdKey                    = mkPreludeMiscIdUnique  6
872 foldrIdKey                    = mkPreludeMiscIdUnique  7
873 recSelErrIdKey                = mkPreludeMiscIdUnique  8
874 integerMinusOneIdKey          = mkPreludeMiscIdUnique  9
875 integerPlusOneIdKey           = mkPreludeMiscIdUnique 10
876 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 11
877 integerZeroIdKey              = mkPreludeMiscIdUnique 12
878 int2IntegerIdKey              = mkPreludeMiscIdUnique 13
879 seqIdKey                      = mkPreludeMiscIdUnique 14
880 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 15
881 eqStringIdKey                 = mkPreludeMiscIdUnique 16
882 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
883 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
884 errorCStringIdKey             = mkPreludeMiscIdUnique 19 
885 parErrorIdKey                 = mkPreludeMiscIdUnique 20
886 parIdKey                      = mkPreludeMiscIdUnique 21
887 patErrorIdKey                 = mkPreludeMiscIdUnique 22
888 realWorldPrimIdKey            = mkPreludeMiscIdUnique 23
889 recConErrorIdKey              = mkPreludeMiscIdUnique 24
890 recUpdErrorIdKey              = mkPreludeMiscIdUnique 25
891 traceIdKey                    = mkPreludeMiscIdUnique 26
892 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 27
893 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 28
894 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 29
895 unpackCStringIdKey            = mkPreludeMiscIdUnique 30
896 ushowListIdKey                = mkPreludeMiscIdUnique 31
897 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
898 concatIdKey                   = mkPreludeMiscIdUnique 33
899 filterIdKey                   = mkPreludeMiscIdUnique 34
900 zipIdKey                      = mkPreludeMiscIdUnique 35
901 bindIOIdKey                   = mkPreludeMiscIdUnique 36
902 returnIOIdKey                 = mkPreludeMiscIdUnique 37
903 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
904 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
905 getTagIdKey                   = mkPreludeMiscIdUnique 40
906 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
907 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
908 printIdKey                    = mkPreludeMiscIdUnique 43
909 failIOIdKey                   = mkPreludeMiscIdUnique 44
910 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
911 voidArgIdKey                  = mkPreludeMiscIdUnique 47
912 splitIdKey                    = mkPreludeMiscIdUnique 48
913 fstIdKey                      = mkPreludeMiscIdUnique 49
914 sndIdKey                      = mkPreludeMiscIdUnique 50
915 otherwiseIdKey                = mkPreludeMiscIdUnique 51
916 mapIdKey                      = mkPreludeMiscIdUnique 52
917 assertIdKey                   = mkPreludeMiscIdUnique 53
918 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
919
920 dollarMainKey                 = mkPreludeMiscIdUnique 55
921 runMainKey                    = mkPreludeMiscIdUnique 56
922
923 andIdKey                      = mkPreludeMiscIdUnique 57
924 orIdKey                       = mkPreludeMiscIdUnique 58
925
926 -- Parallel array functions
927 nullPIdKey                    = mkPreludeMiscIdUnique 70
928 lengthPIdKey                  = mkPreludeMiscIdUnique 71
929 replicatePIdKey               = mkPreludeMiscIdUnique 72
930 mapPIdKey                     = mkPreludeMiscIdUnique 73
931 filterPIdKey                  = mkPreludeMiscIdUnique 74
932 zipPIdKey                     = mkPreludeMiscIdUnique 75
933 crossPIdKey                   = mkPreludeMiscIdUnique 76
934 indexPIdKey                   = mkPreludeMiscIdUnique 77
935 toPIdKey                      = mkPreludeMiscIdUnique 78
936 enumFromToPIdKey              = mkPreludeMiscIdUnique 79
937 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 80
938 bpermutePIdKey                = mkPreludeMiscIdUnique 81
939 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 82
940 indexOfPIdKey                 = mkPreludeMiscIdUnique 83
941 \end{code}
942
943 Certain class operations from Prelude classes.  They get their own
944 uniques so we can look them up easily when we want to conjure them up
945 during type checking.
946
947 \begin{code}
948         -- Just a place holder for  unbound variables  produced by the renamer:
949 unboundKey                    = mkPreludeMiscIdUnique 101 
950 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
951 minusClassOpKey               = mkPreludeMiscIdUnique 103
952 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
953 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
954 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
955 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
956 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
957 eqClassOpKey                  = mkPreludeMiscIdUnique 109
958 geClassOpKey                  = mkPreludeMiscIdUnique 110
959 negateClassOpKey              = mkPreludeMiscIdUnique 111
960 failMClassOpKey               = mkPreludeMiscIdUnique 112
961 thenMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
962 fromEnumClassOpKey            = mkPreludeMiscIdUnique 115
963 returnMClassOpKey             = mkPreludeMiscIdUnique 117
964 toEnumClassOpKey              = mkPreludeMiscIdUnique 119
965 \end{code}
966
967
968 %************************************************************************
969 %*                                                                      *
970 \subsection{Standard groups of types}
971 %*                                                                      *
972 %************************************************************************
973
974 \begin{code}
975 numericTyKeys = 
976         [ addrTyConKey
977         , wordTyConKey
978         , intTyConKey
979         , integerTyConKey
980         , doubleTyConKey
981         , floatTyConKey
982         ]
983
984         -- Renamer always imports these data decls replete with constructors
985         -- so that desugarer can always see their constructors.  Ugh!
986 cCallishTyKeys = 
987         [ addrTyConKey
988         , wordTyConKey
989         , byteArrayTyConKey
990         , mutableByteArrayTyConKey
991         , foreignObjTyConKey
992         , foreignPtrTyConKey
993         , stablePtrTyConKey
994         , int8TyConKey
995         , int16TyConKey
996         , int32TyConKey
997         , int64TyConKey
998         , word8TyConKey
999         , word16TyConKey
1000         , word32TyConKey
1001         , word64TyConKey
1002         ]
1003 \end{code}
1004
1005
1006 %************************************************************************
1007 %*                                                                      *
1008 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1009 %*                                                                      *
1010 %************************************************************************
1011
1012 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1013 (@TcDeriv@).
1014
1015 @derivingOccurrences@ maps a class name to a list of the (qualified)
1016 occurrences that will be mentioned by the derived code for the class
1017 when it is later generated.  We don't need to put in things that are
1018 WiredIn (because they are already mapped to their correct name by the
1019 @NameSupply@.  The class itself, and all its class ops, is already
1020 flagged as an occurrence so we don't need to mention that either.
1021
1022 @derivingOccurrences@ has an item for every derivable class, even if
1023 that item is empty, because we treat lookup failure as indicating that
1024 the class is illegal in a deriving clause.
1025
1026 \begin{code}
1027 derivingOccurrences :: UniqFM [RdrName]
1028 derivingOccurrences = listToUFM deriving_occ_info
1029
1030 derivableClassKeys  = map fst deriving_occ_info
1031
1032 deriving_occ_info
1033   = [ (eqClassKey,      [intTyCon_RDR, and_RDR, not_RDR])
1034     , (ordClassKey,     [intTyCon_RDR, compose_RDR, eqTag_RDR])
1035                                 -- EQ (from Ordering) is needed to force in the constructors
1036                                 -- as well as the type constructor.
1037     , (enumClassKey,    [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
1038                                 -- The last two Enum deps are only used to produce better
1039                                 -- error msgs for derived toEnum methods.
1040     , (boundedClassKey, [intTyCon_RDR])
1041     , (showClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, 
1042                          showParen_RDR, showSpace_RDR, showList___RDR])
1043     , (readClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
1044                          foldr_RDR, build_RDR,
1045                              -- foldr and build required for list comprehension
1046                              -- KSW 2000-06
1047                          lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
1048                              -- returnM (and the rest of the Monad class decl) 
1049                              -- will be forced in as result of depending
1050                              -- on thenM.   -- SOF 1/99
1051     , (ixClassKey,      [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
1052                          foldr_RDR, build_RDR,
1053                              -- foldr and build required for list comprehension used
1054                              -- with single constructor types  -- KSW 2000-06
1055                          returnM_RDR, failM_RDR])
1056                              -- the last two are needed to force returnM, thenM and failM
1057                              -- in before typechecking the list(monad) comprehension
1058                              -- generated for derived Ix instances (range method)
1059                              -- of single constructor types.  -- SOF 8/97
1060     ]
1061         -- intTyCon: Practically any deriving needs Int, either for index calculations, 
1062         --              or for taggery.
1063         -- ordClass: really it's the methods that are actually used.
1064         -- numClass: for Int literals
1065 \end{code}
1066
1067
1068 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1069 even though every numeric class has these two as a superclass,
1070 because the list of ambiguous dictionaries hasn't been simplified.
1071
1072 \begin{code}
1073 numericClassKeys =
1074         [ numClassKey
1075         , realClassKey
1076         , integralClassKey
1077         ]
1078         ++ fractionalClassKeys
1079
1080 fractionalClassKeys = 
1081         [ fractionalClassKey
1082         , floatingClassKey
1083         , realFracClassKey
1084         , realFloatClassKey
1085         ]
1086
1087         -- the strictness analyser needs to know about numeric types
1088         -- (see SaAbsInt.lhs)
1089 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1090         [ readClassKey
1091         ]
1092
1093 cCallishClassKeys = 
1094         [ cCallableClassKey
1095         , cReturnableClassKey
1096         ]
1097
1098 standardClassKeys
1099   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1100     --
1101     -- We have to have "CCallable" and "CReturnable" in the standard
1102     -- classes, so that if you go...
1103     --
1104     --      _ccall_ foo ... 93{-numeric literal-} ...
1105     --
1106     -- ... it can do The Right Thing on the 93.
1107
1108 noDictClassKeys         -- These classes are used only for type annotations;
1109                         -- they are not implemented by dictionaries, ever.
1110   = cCallishClassKeys
1111 \end{code}
1112