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