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