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