[project @ 2002-03-18 15:21:25 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelNames]{Definitions of prelude modules}
5
6 The strings identify built-in prelude modules.  They are
7 defined here so as to avod 
8
9 [oh dear, looks like the recursive module monster caught up with
10  and gobbled whoever was writing the above :-) -- SOF ]
11
12 \begin{code}
13 module PrelNames (
14         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, mkInternalName, mkKnownKeyExternalName, 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 = mkInternalName 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 = mkInternalName 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 gHC_PRIM_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_ADDR_Name    = mkModuleName "GHC.Addr"
245 pREL_PTR_Name     = mkModuleName "GHC.Ptr"
246 pREL_ERR_Name     = mkModuleName "GHC.Err"
247 pREL_REAL_Name    = mkModuleName "GHC.Real"
248 pREL_FLOAT_Name   = mkModuleName "GHC.Float"
249 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
250 sYSTEM_IO_Name    = mkModuleName "System.IO"
251
252 mAIN_Name         = mkModuleName "Main"
253 pREL_INT_Name     = mkModuleName "GHC.Int"
254 pREL_WORD_Name    = mkModuleName "GHC.Word"
255
256 fOREIGNOBJ_Name   = mkModuleName "ForeignObj"
257 aDDR_Name         = mkModuleName "Addr"
258
259 gLA_EXTS_Name   = mkModuleName "GHC.Exts"
260
261 gHC_PRIM        = mkPrelModule gHC_PRIM_Name
262 pREL_BASE       = mkPrelModule pREL_BASE_Name
263 pREL_ADDR       = mkPrelModule pREL_ADDR_Name
264 pREL_PTR        = mkPrelModule pREL_PTR_Name
265 pREL_STABLE     = mkPrelModule pREL_STABLE_Name
266 pREL_IO_BASE    = mkPrelModule pREL_IO_BASE_Name
267 pREL_PACK       = mkPrelModule pREL_PACK_Name
268 pREL_ERR        = mkPrelModule pREL_ERR_Name
269 pREL_NUM        = mkPrelModule pREL_NUM_Name
270 pREL_REAL       = mkPrelModule pREL_REAL_Name
271 pREL_FLOAT      = mkPrelModule pREL_FLOAT_Name
272 pRELUDE         = mkPrelModule pRELUDE_Name
273
274 iNTERACTIVE     = mkHomeModule (mkModuleName "$Interactive")
275 \end{code}
276
277 %************************************************************************
278 %*                                                                      *
279 \subsection{Constructing the names of tuples
280 %*                                                                      *
281 %************************************************************************
282
283 \begin{code}
284 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
285
286 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
287 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
288 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)")   -- not strictly necessary
289 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)")  -- ditto
290 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
291 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
292
293 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
294 mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
295 mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, _PK_ "(#,#)")
296 mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, _PK_ "(#,,#)")
297 mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, _PK_ "(#,,,#)")
298 mkTupNameStr Unboxed n = (gHC_PRIM_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
299
300 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
301 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
302                                           (mod, occ) -> mkOrig space mod occ
303 \end{code}
304
305
306 %************************************************************************
307 %*                                                                      *
308 \subsection{Unqualified RdrNames}
309 %*                                                                      *
310 %************************************************************************
311
312 \begin{code}
313 main_RDR_Unqual :: RdrName
314 main_RDR_Unqual = mkUnqual varName FSLIT("main")
315 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
316 -- gets an Orig RdrName, and we want a Qual or Unqual one.  An Unqual
317 -- one will do fine.
318 \end{code}
319
320
321 %************************************************************************
322 %*                                                                      *
323 \subsection{Commonly-used RdrNames}
324 %*                                                                      *
325 %************************************************************************
326
327 Many of these Names are not really "built in", but some parts of the
328 compiler (notably the deriving mechanism) need to mention their names,
329 and it's convenient to write them all down in one place.
330
331 \begin{code}
332 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
333 runMainName    = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey
334
335 -- Stuff from GHC.Prim
336 usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
337 usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
338 superKindName    = kindQual FSLIT("KX") kindConKey
339 superBoxityName  = kindQual FSLIT("BX") boxityConKey
340 liftedConName    = kindQual FSLIT("*") liftedConKey
341 unliftedConName  = kindQual FSLIT("#") unliftedConKey
342 openKindConName  = kindQual FSLIT("?") anyBoxConKey
343 usageKindConName = kindQual FSLIT("$") usageConKey
344 typeConName      = kindQual FSLIT("Type") typeConKey
345
346 funTyConName                  = tcQual  gHC_PRIM_Name FSLIT("(->)")  funTyConKey
347 charPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey 
348 intPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey 
349 int32PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey 
350 int64PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey 
351 wordPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey 
352 word32PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey 
353 word64PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey 
354 addrPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey 
355 floatPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey 
356 doublePrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey 
357 statePrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("State#") statePrimTyConKey 
358 realWorldTyConName            = tcQual  gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey 
359 arrayPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey 
360 byteArrayPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey 
361 mutableArrayPrimTyConName     = tcQual  gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey 
362 mutableByteArrayPrimTyConName = tcQual  gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
363 mutVarPrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey 
364 mVarPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey 
365 stablePtrPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey 
366 stableNamePrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey 
367 foreignObjPrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey 
368 bcoPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey 
369 weakPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey 
370 threadIdPrimTyConName         = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
371 cCallableClassName            = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
372 cReturnableClassName          = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
373
374 -- PrelBase data types and constructors
375 charTyConName     = tcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
376 charDataConName   = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey
377 intTyConName      = tcQual   pREL_BASE_Name FSLIT("Int") intTyConKey
378 intDataConName    = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey
379 orderingTyConName = tcQual   pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
380 boolTyConName     = tcQual   pREL_BASE_Name FSLIT("Bool") boolTyConKey
381 falseDataConName  = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey
382 trueDataConName   = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey
383 listTyConName     = tcQual   pREL_BASE_Name FSLIT("[]") listTyConKey
384 nilDataConName    = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
385 consDataConName   = dataQual pREL_BASE_Name FSLIT(":") consDataConKey
386
387 -- PrelTup
388 fstName           = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
389 sndName           = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
390
391 -- Generics
392 crossTyConName     = tcQual   pREL_BASE_Name FSLIT(":*:") crossTyConKey
393 crossDataConName   = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
394 plusTyConName      = tcQual   pREL_BASE_Name FSLIT(":+:") plusTyConKey
395 inlDataConName     = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
396 inrDataConName     = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
397 genUnitTyConName   = tcQual   pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
398 genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
399
400 -- Random PrelBase functions
401 unsafeCoerceName  = varQual pREL_BASE_Name FSLIT("unsafeCoerce") 
402                                                              unsafeCoerceIdKey
403 otherwiseIdName   = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
404 appendName        = varQual pREL_BASE_Name FSLIT("++")       appendIdKey
405 foldrName         = varQual pREL_BASE_Name FSLIT("foldr")     foldrIdKey
406 mapName           = varQual pREL_BASE_Name FSLIT("map")      mapIdKey
407 buildName         = varQual pREL_BASE_Name FSLIT("build")     buildIdKey
408 augmentName       = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
409 eqStringName      = varQual pREL_BASE_Name FSLIT("eqString")  eqStringIdKey
410 andName           = varQual pREL_BASE_Name FSLIT("&&")       andIdKey
411 orName            = varQual pREL_BASE_Name FSLIT("||")       orIdKey
412
413 -- Strings
414 unpackCStringName       = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
415 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
416 unpackCStringFoldrName  = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
417 unpackCStringUtf8Name   = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
418
419 -- Classes Eq and Ord
420 eqClassName       = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
421 ordClassName      = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
422 eqName            = varQual  pREL_BASE_Name FSLIT("==") eqClassOpKey
423 geName            = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
424
425 -- Class Monad
426 monadClassName     = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
427 thenMName          = varQual pREL_BASE_Name FSLIT(">>=") thenMClassOpKey
428 returnMName        = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
429 failMName          = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
430
431 -- Class Functor
432 functorClassName  = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
433
434 -- Class Show
435 showClassName     = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey
436
437 -- Class Read
438 readClassName     = clsQual pREL_READ_Name FSLIT("Read") readClassKey
439
440 -- Module PrelNum
441 numClassName      = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
442 fromIntegerName   = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
443 minusName         = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
444 negateName        = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
445 plusIntegerName   = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
446 timesIntegerName  = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
447 integerTyConName  = tcQual  pREL_NUM_Name FSLIT("Integer") integerTyConKey
448 smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
449 largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
450
451 -- PrelReal types and classes
452 rationalTyConName   = tcQual   pREL_REAL_Name  FSLIT("Rational") rationalTyConKey
453 ratioTyConName      = tcQual   pREL_REAL_Name  FSLIT("Ratio") ratioTyConKey
454 ratioDataConName    = dataQual pREL_REAL_Name  FSLIT(":%") ratioDataConKey
455 realClassName       = clsQual  pREL_REAL_Name  FSLIT("Real") realClassKey
456 integralClassName   = clsQual  pREL_REAL_Name  FSLIT("Integral") integralClassKey
457 realFracClassName   = clsQual  pREL_REAL_Name  FSLIT("RealFrac") realFracClassKey
458 fractionalClassName = clsQual  pREL_REAL_Name  FSLIT("Fractional") fractionalClassKey
459 fromRationalName    = varQual  pREL_REAL_Name  FSLIT("fromRational") fromRationalClassOpKey
460
461 -- PrelFloat classes
462 floatTyConName     = tcQual   pREL_FLOAT_Name FSLIT("Float") floatTyConKey
463 floatDataConName   = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
464 doubleTyConName    = tcQual   pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
465 doubleDataConName  = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
466 floatingClassName  = clsQual  pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
467 realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
468
469 -- Class Ix
470 ixClassName        = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
471
472 -- Class Enum
473 enumClassName      = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
474 toEnumName         = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey
475 fromEnumName       = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey
476 enumFromName       = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
477 enumFromToName     = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
478 enumFromThenName   = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
479 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
480
481 -- Overloaded via Class Enum
482 enumFromToPName    = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
483 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
484
485 -- Class Bounded
486 boundedClassName  = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
487
488 -- List functions
489 concatName        = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
490 filterName        = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
491 zipName           = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
492
493 -- parallel array types and functions
494 parrTyConName     = tcQual  pREL_PARR_Name FSLIT("[::]")       parrTyConKey
495 parrDataConName   = dataQual pREL_PARR_Name FSLIT("PArr")      parrDataConKey
496 nullPName         = varQual pREL_PARR_Name FSLIT("nullP")      nullPIdKey
497 lengthPName       = varQual pREL_PARR_Name FSLIT("lengthP")    lengthPIdKey
498 replicatePName    = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey
499 mapPName          = varQual pREL_PARR_Name FSLIT("mapP")       mapPIdKey
500 filterPName       = varQual pREL_PARR_Name FSLIT("filterP")    filterPIdKey
501 zipPName          = varQual pREL_PARR_Name FSLIT("zipP")       zipPIdKey
502 crossPName        = varQual pREL_PARR_Name FSLIT("crossP")     crossPIdKey
503 indexPName        = varQual pREL_PARR_Name FSLIT("!:")        indexPIdKey
504 toPName           = varQual pREL_PARR_Name FSLIT("toP")       toPIdKey
505 bpermutePName     = varQual pREL_PARR_Name FSLIT("bpermuteP")  bpermutePIdKey
506 bpermuteDftPName  = varQual pREL_PARR_Name FSLIT("bpermuteDftP") 
507                                                               bpermuteDftPIdKey
508 indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")   indexOfPIdKey
509
510 -- IOBase things
511 ioTyConName       = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
512 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
513 bindIOName        = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
514 returnIOName      = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
515 failIOName        = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
516
517 -- IO things
518 printName         = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
519
520 -- Int, Word, and Addr things
521 int8TyConName     = tcQual pREL_INT_Name  FSLIT("Int8") int8TyConKey
522 int16TyConName    = tcQual pREL_INT_Name  FSLIT("Int16") int16TyConKey
523 int32TyConName    = tcQual pREL_INT_Name  FSLIT("Int32") int32TyConKey
524 int64TyConName    = tcQual pREL_INT_Name  FSLIT("Int64") int64TyConKey
525
526 word8TyConName    = tcQual pREL_WORD_Name FSLIT("Word8")  word8TyConKey
527 word16TyConName   = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey
528 word32TyConName   = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey
529 word64TyConName   = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey
530
531 wordTyConName     = tcQual   pREL_WORD_Name FSLIT("Word")   wordTyConKey
532 wordDataConName   = dataQual pREL_WORD_Name FSLIT("W#")     wordDataConKey
533
534 addrTyConName     = tcQual   aDDR_Name FSLIT("Addr") addrTyConKey
535 addrDataConName   = dataQual aDDR_Name FSLIT("A#") addrDataConKey
536
537 ptrTyConName      = tcQual   pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
538 ptrDataConName    = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
539
540 funPtrTyConName   = tcQual   pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
541 funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
542
543 -- Byte array types
544 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  FSLIT("ByteArray") byteArrayTyConKey
545 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  FSLIT("MutableByteArray") mutableByteArrayTyConKey
546
547 -- Foreign objects and weak pointers
548 foreignObjTyConName   = tcQual   fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjTyConKey
549 foreignObjDataConName = dataQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjDataConKey
550 foreignPtrTyConName   = tcQual   fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrTyConKey
551 foreignPtrDataConName = dataQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrDataConKey
552 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
553 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
554 deRefStablePtrName    = varQual  pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
555 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
556
557 assertName         = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
558 getTagName         = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
559
560 errorName          = varQual pREL_ERR_Name FSLIT("error") errorIdKey
561 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
562
563 -- The "split" Id for splittable implicit parameters
564 splitName          = varQual gLA_EXTS_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 = mkKnownKeyExternalName (varQual_RDR  mod str) uq
693 dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq
694 tcQual   mod str uq = mkKnownKeyExternalName (tcQual_RDR   mod str) uq
695 clsQual  mod str uq = mkKnownKeyExternalName (clsQual_RDR  mod str) uq
696
697 kindQual str uq = mkInternalName 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