PA functions are no longer methods
[ghc-hetmet.git] / 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 Nota Bene: all Names defined in here should come from the base package
8
9 * ModuleNames for prelude modules, 
10         e.g.    pREL_BASE_Name :: ModuleName
11
12 * Modules for prelude modules
13         e.g.    pREL_Base :: Module
14
15 * Uniques for Ids, DataCons, TyCons and Classes that the compiler 
16   "knows about" in some way
17         e.g.    intTyConKey :: Unique
18                 minusClassOpKey :: Unique
19
20 * Names for Ids, DataCons, TyCons and Classes that the compiler 
21   "knows about" in some way
22         e.g.    intTyConName :: Name
23                 minusName    :: Name
24   One of these Names contains
25         (a) the module and occurrence name of the thing
26         (b) its Unique
27   The may way the compiler "knows about" one of these things is
28   where the type checker or desugarer needs to look it up. For
29   example, when desugaring list comprehensions the desugarer
30   needs to conjure up 'foldr'.  It does this by looking up
31   foldrName in the environment.
32
33 * RdrNames for Ids, DataCons etc that the compiler may emit into
34   generated code (e.g. for deriving).  It's not necessary to know
35   the uniques for these guys, only their names
36
37
38 \begin{code}
39 module PrelNames (
40         Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
41
42         -----------------------------------------------------------
43         module PrelNames,       -- A huge bunch of (a) Names,  e.g. intTyConName
44                                 --                 (b) Uniques e.g. intTyConKey
45                                 --                 (c) Groups of classes and types
46                                 --                 (d) miscellaneous things
47                                 -- So many that we export them all
48     ) where
49
50 #include "HsVersions.h"
51
52 import PackageConfig
53 import Module     ( Module, ModuleName, mkModule, mkModuleNameFS )
54 import OccName    ( dataName, tcName, clsName, varName, mkOccNameFS,
55                     mkVarOccFS )
56 import RdrName    ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
57 import Unique     ( Unique, Uniquable(..), hasKey,
58                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
59                     mkPreludeTyConUnique, mkPreludeClassUnique,
60                     mkTupleTyConUnique
61                   ) 
62 import BasicTypes ( Boxity(..), Arity )
63 import Name       ( Name, mkInternalName, mkExternalName )
64 import SrcLoc
65 import FastString
66 \end{code}
67
68
69 %************************************************************************
70 %*                                                                      *
71 \subsection{Local Names}
72 %*                                                                      *
73 %************************************************************************
74
75 This *local* name is used by the interactive stuff
76
77 \begin{code}
78 itName uniq = mkInternalName uniq (mkOccNameFS varName FSLIT("it")) noSrcSpan
79 \end{code}
80
81 \begin{code}
82 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
83 -- during compiler debugging.
84 mkUnboundName :: RdrName -> Name
85 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcSpan
86
87 isUnboundName :: Name -> Bool
88 isUnboundName name = name `hasKey` unboundKey
89 \end{code}
90
91
92 %************************************************************************
93 %*                                                                      *
94 \subsection{Known key Names}
95 %*                                                                      *
96 %************************************************************************
97
98 This section tells what the compiler knows about the assocation of
99 names with uniques.  These ones are the *non* wired-in ones.  The
100 wired in ones are defined in TysWiredIn etc.
101
102 \begin{code}
103 basicKnownKeyNames :: [Name]
104 basicKnownKeyNames
105  = genericTyConNames
106  ++ typeableClassNames
107  ++ ndpNames
108  ++ [   -- Type constructors (synonyms especially)
109         ioTyConName, ioDataConName,
110         runMainIOName,
111         orderingTyConName,
112         rationalTyConName,
113         stringTyConName,
114         ratioDataConName,
115         ratioTyConName,
116         integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
117
118         --  Classes.  *Must* include:
119         --      classes that are grabbed by key (e.g., eqClassKey)
120         --      classes in "Class.standardClassKeys" (quite a few)
121         eqClassName,                    -- mentioned, derivable
122         ordClassName,                   -- derivable
123         boundedClassName,               -- derivable
124         numClassName,                   -- mentioned, numeric
125         enumClassName,                  -- derivable
126         monadClassName,
127         functorClassName,
128         realClassName,                  -- numeric
129         integralClassName,              -- numeric
130         fractionalClassName,            -- numeric
131         floatingClassName,              -- numeric
132         realFracClassName,              -- numeric
133         realFloatClassName,             -- numeric
134         dataClassName, 
135         isStringClassName,
136
137         -- Numeric stuff
138         negateName, minusName, 
139         fromRationalName, fromIntegerName, 
140         geName, eqName, 
141
142         -- String stuff
143         fromStringName,
144         
145         -- Enum stuff
146         enumFromName, enumFromThenName, 
147         enumFromThenToName, enumFromToName,
148         enumFromToPName, enumFromThenToPName,
149
150         -- Monad stuff
151         thenIOName, bindIOName, returnIOName, failIOName,
152         failMName, bindMName, thenMName, returnMName,
153
154         -- MonadRec stuff
155         mfixName,
156
157         -- Arrow stuff
158         arrAName, composeAName, firstAName,
159         appAName, choiceAName, loopAName,
160
161         -- Ix stuff
162         ixClassName, 
163
164         -- Show stuff
165         showClassName, 
166
167         -- Read stuff
168         readClassName, 
169         
170         -- Stable pointers
171         newStablePtrName,
172
173         -- Strings and lists
174         unpackCStringName, unpackCStringAppendName,
175         unpackCStringFoldrName, unpackCStringUtf8Name,
176
177         -- List operations
178         concatName, filterName,
179         zipName, foldrName, buildName, augmentName, appendName,
180
181         -- Parallel array operations
182         nullPName, lengthPName, replicatePName, mapPName,
183         filterPName, zipPName, crossMapPName, indexPName,
184         toPName, bpermutePName, bpermuteDftPName, indexOfPName,
185
186         -- FFI primitive types that are not wired-in.
187         stablePtrTyConName, ptrTyConName, funPtrTyConName,
188         int8TyConName, int16TyConName, int32TyConName, int64TyConName,
189         wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
190
191         -- Others
192         otherwiseIdName, inlineIdName,
193         plusIntegerName, timesIntegerName,
194         eqStringName, assertName, breakpointName, breakpointCondName,
195         breakpointAutoName,  opaqueTyConName,
196         assertErrorName, runSTRepName,
197         printName, fstName, sndName,
198
199         -- MonadFix
200         monadFixClassName, mfixName,
201
202         -- Other classes
203         randomClassName, randomGenClassName, monadPlusClassName,
204
205         -- Booleans
206         andName, orName
207         
208         -- The Either type
209         , eitherTyConName, leftDataConName, rightDataConName
210
211         -- dotnet interop
212         , objectTyConName, marshalObjectName, unmarshalObjectName
213         , marshalStringName, unmarshalStringName, checkDotnetResName
214     ]
215
216 genericTyConNames :: [Name]
217 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
218
219 ndpNames :: [Name]
220 ndpNames = [ parrayTyConName, paTyConName, closureTyConName
221            , mkClosureName, applyClosureName
222            , mkClosurePName, applyClosurePName
223            , lengthPAName, replicatePAName, emptyPAName ]
224 \end{code}
225
226
227 %************************************************************************
228 %*                                                                      *
229 \subsection{Module names}
230 %*                                                                      *
231 %************************************************************************
232
233
234 --MetaHaskell Extension Add a new module here
235 \begin{code}
236 pRELUDE         = mkBaseModule_ pRELUDE_NAME
237 gHC_PRIM        = mkBaseModule FSLIT("GHC.Prim")   -- Primitive types and values
238 gHC_BASE        = mkBaseModule FSLIT("GHC.Base")
239 gHC_ENUM        = mkBaseModule FSLIT("GHC.Enum")
240 gHC_SHOW        = mkBaseModule FSLIT("GHC.Show")
241 gHC_READ        = mkBaseModule FSLIT("GHC.Read")
242 gHC_NUM         = mkBaseModule FSLIT("GHC.Num")
243 gHC_LIST        = mkBaseModule FSLIT("GHC.List")
244 gHC_PARR        = mkBaseModule FSLIT("GHC.PArr")
245 dATA_TUP        = mkBaseModule FSLIT("Data.Tuple")
246 dATA_EITHER     = mkBaseModule FSLIT("Data.Either")
247 dATA_STRING     = mkBaseModule FSLIT("Data.String")
248 gHC_PACK        = mkBaseModule FSLIT("GHC.Pack")
249 gHC_CONC        = mkBaseModule FSLIT("GHC.Conc")
250 gHC_IO_BASE     = mkBaseModule FSLIT("GHC.IOBase")
251 gHC_ST          = mkBaseModule FSLIT("GHC.ST")
252 gHC_ARR         = mkBaseModule FSLIT("GHC.Arr")
253 gHC_STABLE      = mkBaseModule FSLIT("GHC.Stable")
254 gHC_ADDR        = mkBaseModule FSLIT("GHC.Addr")
255 gHC_PTR         = mkBaseModule FSLIT("GHC.Ptr")
256 gHC_ERR         = mkBaseModule FSLIT("GHC.Err")
257 gHC_REAL        = mkBaseModule FSLIT("GHC.Real")
258 gHC_FLOAT       = mkBaseModule FSLIT("GHC.Float")
259 gHC_TOP_HANDLER = mkBaseModule FSLIT("GHC.TopHandler")
260 sYSTEM_IO       = mkBaseModule FSLIT("System.IO")
261 dYNAMIC         = mkBaseModule FSLIT("Data.Dynamic")
262 tYPEABLE        = mkBaseModule FSLIT("Data.Typeable")
263 gENERICS        = mkBaseModule FSLIT("Data.Generics.Basics")
264 dOTNET          = mkBaseModule FSLIT("GHC.Dotnet")
265 rEAD_PREC       = mkBaseModule FSLIT("Text.ParserCombinators.ReadPrec")
266 lEX             = mkBaseModule FSLIT("Text.Read.Lex")
267 gHC_INT         = mkBaseModule FSLIT("GHC.Int")
268 gHC_WORD        = mkBaseModule FSLIT("GHC.Word")
269 mONAD           = mkBaseModule FSLIT("Control.Monad")
270 mONAD_FIX       = mkBaseModule FSLIT("Control.Monad.Fix")
271 aRROW           = mkBaseModule FSLIT("Control.Arrow")
272 rANDOM          = mkBaseModule FSLIT("System.Random")
273 gLA_EXTS        = mkBaseModule FSLIT("GHC.Exts")
274
275 nDP_PARRAY      = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.PArray")
276 nDP_CLOSURE     = mkNDPModule FSLIT("Data.Array.Parallel.Lifted.Closure")
277 nDP_INTERFACE_NAME = mkModuleNameFS FSLIT("Data.Array.Parallel.Lifted")
278 nDP_BUILTIN     = mkModuleNameFS FSLIT(":NDP")
279
280 mAIN            = mkMainModule_ mAIN_NAME
281 rOOT_MAIN       = mkMainModule FSLIT(":Main") -- Root module for initialisation 
282
283         -- The ':xxx' makes a module name that the user can never
284         -- use himself.  The z-encoding for ':' is "ZC", so the z-encoded
285         -- module name still starts with a capital letter, which keeps
286         -- the z-encoded version consistent.
287 iNTERACTIVE    = mkMainModule FSLIT(":Interactive")
288 thFAKE         = mkMainModule FSLIT(":THFake")
289
290 pRELUDE_NAME   = mkModuleNameFS FSLIT("Prelude")
291 mAIN_NAME      = mkModuleNameFS FSLIT("Main")
292
293 mkBaseModule :: FastString -> Module
294 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
295
296 mkBaseModule_ :: ModuleName -> Module
297 mkBaseModule_ m = mkModule basePackageId m
298
299 mkNDPModule :: FastString -> Module
300 mkNDPModule m = mkModule ndpPackageId (mkModuleNameFS m)
301
302 mkNDPModule_ :: ModuleName -> Module
303 mkNDPModule_ m = mkModule ndpPackageId m
304
305 mkMainModule :: FastString -> Module
306 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
307
308 mkMainModule_ :: ModuleName -> Module
309 mkMainModule_ m = mkModule mainPackageId m
310 \end{code}
311
312 %************************************************************************
313 %*                                                                      *
314 \subsection{Constructing the names of tuples
315 %*                                                                      *
316 %************************************************************************
317
318 \begin{code}
319 mkTupleModule :: Boxity -> Arity -> Module
320 mkTupleModule Boxed   0 = gHC_BASE
321 mkTupleModule Boxed   _ = dATA_TUP
322 mkTupleModule Unboxed _ = gHC_PRIM
323 \end{code}
324
325
326 %************************************************************************
327 %*                                                                      *
328                         RdrNames
329 %*                                                                      *
330 %************************************************************************
331
332 \begin{code}
333 main_RDR_Unqual         = mkUnqual varName FSLIT("main")
334         -- We definitely don't want an Orig RdrName, because
335         -- main might, in principle, be imported into module Main
336
337 eq_RDR                  = nameRdrName eqName
338 ge_RDR                  = nameRdrName geName
339 ne_RDR                  = varQual_RDR  gHC_BASE FSLIT("/=")
340 le_RDR                  = varQual_RDR  gHC_BASE FSLIT("<=") 
341 gt_RDR                  = varQual_RDR  gHC_BASE FSLIT(">")  
342 compare_RDR             = varQual_RDR  gHC_BASE FSLIT("compare") 
343 ltTag_RDR               = dataQual_RDR gHC_BASE FSLIT("LT") 
344 eqTag_RDR               = dataQual_RDR gHC_BASE FSLIT("EQ")
345 gtTag_RDR               = dataQual_RDR gHC_BASE FSLIT("GT")
346
347 eqClass_RDR             = nameRdrName eqClassName
348 numClass_RDR            = nameRdrName numClassName
349 ordClass_RDR            = nameRdrName ordClassName
350 enumClass_RDR           = nameRdrName enumClassName
351 monadClass_RDR          = nameRdrName monadClassName
352
353 map_RDR                 = varQual_RDR gHC_BASE FSLIT("map")
354 append_RDR              = varQual_RDR gHC_BASE FSLIT("++")
355
356 foldr_RDR               = nameRdrName foldrName
357 build_RDR               = nameRdrName buildName
358 returnM_RDR             = nameRdrName returnMName
359 bindM_RDR               = nameRdrName bindMName
360 failM_RDR               = nameRdrName failMName
361
362 and_RDR                 = nameRdrName andName
363
364 left_RDR                = nameRdrName leftDataConName
365 right_RDR               = nameRdrName rightDataConName
366
367 fromEnum_RDR            = varQual_RDR gHC_ENUM FSLIT("fromEnum")
368 toEnum_RDR              = varQual_RDR gHC_ENUM FSLIT("toEnum")
369
370 enumFrom_RDR            = nameRdrName enumFromName
371 enumFromTo_RDR          = nameRdrName enumFromToName
372 enumFromThen_RDR        = nameRdrName enumFromThenName
373 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
374
375 ratioDataCon_RDR        = nameRdrName ratioDataConName
376 plusInteger_RDR         = nameRdrName plusIntegerName
377 timesInteger_RDR        = nameRdrName timesIntegerName
378
379 ioDataCon_RDR           = nameRdrName ioDataConName
380
381 eqString_RDR            = nameRdrName eqStringName
382 unpackCString_RDR       = nameRdrName unpackCStringName
383 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
384 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
385
386 newStablePtr_RDR        = nameRdrName newStablePtrName
387 wordDataCon_RDR         = dataQual_RDR gHC_WORD FSLIT("W#")
388
389 bindIO_RDR              = nameRdrName bindIOName
390 returnIO_RDR            = nameRdrName returnIOName
391
392 fromInteger_RDR         = nameRdrName fromIntegerName
393 fromRational_RDR        = nameRdrName fromRationalName
394 minus_RDR               = nameRdrName minusName
395 times_RDR               = varQual_RDR  gHC_NUM FSLIT("*")
396 plus_RDR                = varQual_RDR gHC_NUM FSLIT("+")
397
398 fromString_RDR          = nameRdrName fromStringName
399
400 compose_RDR             = varQual_RDR gHC_BASE FSLIT(".")
401
402 not_RDR                 = varQual_RDR gHC_BASE FSLIT("not")
403 getTag_RDR              = varQual_RDR gHC_BASE FSLIT("getTag")
404 succ_RDR                = varQual_RDR gHC_ENUM FSLIT("succ")
405 pred_RDR                = varQual_RDR gHC_ENUM FSLIT("pred")
406 minBound_RDR            = varQual_RDR gHC_ENUM FSLIT("minBound")
407 maxBound_RDR            = varQual_RDR gHC_ENUM FSLIT("maxBound")
408 range_RDR               = varQual_RDR gHC_ARR FSLIT("range")
409 inRange_RDR             = varQual_RDR gHC_ARR FSLIT("inRange")
410 index_RDR               = varQual_RDR gHC_ARR FSLIT("index")
411 unsafeIndex_RDR         = varQual_RDR gHC_ARR FSLIT("unsafeIndex")
412 unsafeRangeSize_RDR     = varQual_RDR gHC_ARR FSLIT("unsafeRangeSize")
413
414 readList_RDR            = varQual_RDR gHC_READ FSLIT("readList")
415 readListDefault_RDR     = varQual_RDR gHC_READ FSLIT("readListDefault")
416 readListPrec_RDR        = varQual_RDR gHC_READ FSLIT("readListPrec")
417 readListPrecDefault_RDR = varQual_RDR gHC_READ FSLIT("readListPrecDefault")
418 readPrec_RDR            = varQual_RDR gHC_READ FSLIT("readPrec")
419 parens_RDR              = varQual_RDR gHC_READ FSLIT("parens")
420 choose_RDR              = varQual_RDR gHC_READ FSLIT("choose")
421 lexP_RDR                = varQual_RDR gHC_READ FSLIT("lexP")
422
423 punc_RDR                = dataQual_RDR lEX FSLIT("Punc")
424 ident_RDR               = dataQual_RDR lEX FSLIT("Ident")
425 symbol_RDR              = dataQual_RDR lEX FSLIT("Symbol")
426
427 step_RDR                = varQual_RDR  rEAD_PREC FSLIT("step")
428 alt_RDR                 = varQual_RDR  rEAD_PREC FSLIT("+++") 
429 reset_RDR               = varQual_RDR  rEAD_PREC FSLIT("reset")
430 prec_RDR                = varQual_RDR  rEAD_PREC FSLIT("prec")
431
432 showList_RDR            = varQual_RDR gHC_SHOW FSLIT("showList")
433 showList___RDR          = varQual_RDR gHC_SHOW FSLIT("showList__")
434 showsPrec_RDR           = varQual_RDR gHC_SHOW FSLIT("showsPrec") 
435 showString_RDR          = varQual_RDR gHC_SHOW FSLIT("showString")
436 showSpace_RDR           = varQual_RDR gHC_SHOW FSLIT("showSpace") 
437 showParen_RDR           = varQual_RDR gHC_SHOW FSLIT("showParen") 
438
439 typeOf_RDR     = varQual_RDR tYPEABLE FSLIT("typeOf")
440 mkTypeRep_RDR  = varQual_RDR tYPEABLE FSLIT("mkTyConApp")
441 mkTyConRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyCon")
442
443 undefined_RDR = varQual_RDR gHC_ERR FSLIT("undefined")
444
445 crossDataCon_RDR   = dataQual_RDR gHC_BASE FSLIT(":*:")
446 inlDataCon_RDR     = dataQual_RDR gHC_BASE FSLIT("Inl")
447 inrDataCon_RDR     = dataQual_RDR gHC_BASE FSLIT("Inr")
448 genUnitDataCon_RDR = dataQual_RDR gHC_BASE FSLIT("Unit")
449
450 ----------------------
451 varQual_RDR  mod str = mkOrig mod (mkOccNameFS varName str)
452 tcQual_RDR   mod str = mkOrig mod (mkOccNameFS tcName str)
453 clsQual_RDR  mod str = mkOrig mod (mkOccNameFS clsName str)
454 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
455 \end{code}
456
457 %************************************************************************
458 %*                                                                      *
459 \subsection{Known-key names}
460 %*                                                                      *
461 %************************************************************************
462
463 Many of these Names are not really "built in", but some parts of the
464 compiler (notably the deriving mechanism) need to mention their names,
465 and it's convenient to write them all down in one place.
466
467 --MetaHaskell Extension  add the constrs and the lower case case
468 -- guys as well (perhaps) e.g. see  trueDataConName     below
469
470
471 \begin{code}
472 runMainIOName = varQual gHC_TOP_HANDLER FSLIT("runMainIO") runMainKey
473
474 orderingTyConName = tcQual   gHC_BASE FSLIT("Ordering") orderingTyConKey
475
476 eitherTyConName   = tcQual  dATA_EITHER FSLIT("Either") eitherTyConKey
477 leftDataConName   = conName dATA_EITHER FSLIT("Left")   leftDataConKey
478 rightDataConName  = conName dATA_EITHER FSLIT("Right")  rightDataConKey
479
480 -- Generics
481 crossTyConName     = tcQual   gHC_BASE FSLIT(":*:") crossTyConKey
482 plusTyConName      = tcQual   gHC_BASE FSLIT(":+:") plusTyConKey
483 genUnitTyConName   = tcQual   gHC_BASE FSLIT("Unit") genUnitTyConKey
484
485 -- Base strings Strings
486 unpackCStringName       = varQual gHC_BASE FSLIT("unpackCString#") unpackCStringIdKey
487 unpackCStringAppendName = varQual gHC_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
488 unpackCStringFoldrName  = varQual gHC_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
489 unpackCStringUtf8Name   = varQual gHC_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
490 eqStringName            = varQual gHC_BASE FSLIT("eqString")  eqStringIdKey
491 stringTyConName         = tcQual  gHC_BASE FSLIT("String") stringTyConKey
492
493 -- The 'inline' function
494 inlineIdName            = varQual gHC_BASE FSLIT("inline") inlineIdKey
495
496 -- Base classes (Eq, Ord, Functor)
497 eqClassName       = clsQual  gHC_BASE FSLIT("Eq")      eqClassKey
498 eqName            = methName gHC_BASE FSLIT("==")      eqClassOpKey
499 ordClassName      = clsQual  gHC_BASE FSLIT("Ord")     ordClassKey
500 geName            = methName gHC_BASE FSLIT(">=")      geClassOpKey
501 functorClassName  = clsQual  gHC_BASE FSLIT("Functor") functorClassKey
502
503 -- Class Monad
504 monadClassName     = clsQual  gHC_BASE FSLIT("Monad")  monadClassKey
505 thenMName          = methName gHC_BASE FSLIT(">>")     thenMClassOpKey
506 bindMName          = methName gHC_BASE FSLIT(">>=")    bindMClassOpKey
507 returnMName        = methName gHC_BASE FSLIT("return") returnMClassOpKey
508 failMName          = methName gHC_BASE FSLIT("fail")   failMClassOpKey
509
510 -- Random PrelBase functions
511 fromStringName = methName dATA_STRING FSLIT("fromString") fromStringClassOpKey
512 otherwiseIdName   = varQual gHC_BASE FSLIT("otherwise")  otherwiseIdKey
513 foldrName         = varQual gHC_BASE FSLIT("foldr")      foldrIdKey
514 buildName         = varQual gHC_BASE FSLIT("build")      buildIdKey
515 augmentName       = varQual gHC_BASE FSLIT("augment")    augmentIdKey
516 appendName        = varQual gHC_BASE FSLIT("++")         appendIdKey
517 andName           = varQual gHC_BASE FSLIT("&&")         andIdKey
518 orName            = varQual gHC_BASE FSLIT("||")         orIdKey
519 assertName        = varQual gHC_BASE FSLIT("assert")     assertIdKey
520 breakpointName    = varQual gHC_BASE FSLIT("breakpoint") breakpointIdKey
521 breakpointCondName= varQual gHC_BASE FSLIT("breakpointCond") breakpointCondIdKey
522 breakpointAutoName= varQual gHC_BASE FSLIT("breakpointAuto") breakpointAutoIdKey
523 opaqueTyConName   = tcQual  gHC_BASE FSLIT("Opaque")   opaqueTyConKey
524
525 breakpointJumpName
526     = mkInternalName
527         breakpointJumpIdKey
528         (mkOccNameFS varName FSLIT("breakpointJump"))
529         noSrcSpan
530 breakpointCondJumpName
531     = mkInternalName
532         breakpointCondJumpIdKey
533         (mkOccNameFS varName FSLIT("breakpointCondJump"))
534         noSrcSpan
535 breakpointAutoJumpName
536     = mkInternalName
537         breakpointAutoJumpIdKey
538         (mkOccNameFS varName FSLIT("breakpointAutoJump"))
539         noSrcSpan
540
541 -- PrelTup
542 fstName           = varQual dATA_TUP FSLIT("fst") fstIdKey
543 sndName           = varQual dATA_TUP FSLIT("snd") sndIdKey
544
545 -- Module PrelNum
546 numClassName      = clsQual  gHC_NUM FSLIT("Num") numClassKey
547 fromIntegerName   = methName gHC_NUM FSLIT("fromInteger") fromIntegerClassOpKey
548 minusName         = methName gHC_NUM FSLIT("-") minusClassOpKey
549 negateName        = methName gHC_NUM FSLIT("negate") negateClassOpKey
550 plusIntegerName   = varQual  gHC_NUM FSLIT("plusInteger") plusIntegerIdKey
551 timesIntegerName  = varQual  gHC_NUM FSLIT("timesInteger") timesIntegerIdKey
552 integerTyConName  = tcQual   gHC_NUM FSLIT("Integer") integerTyConKey
553 smallIntegerDataConName = conName gHC_NUM FSLIT("S#") smallIntegerDataConKey
554 largeIntegerDataConName = conName gHC_NUM FSLIT("J#") largeIntegerDataConKey
555
556 -- PrelReal types and classes
557 rationalTyConName   = tcQual  gHC_REAL FSLIT("Rational") rationalTyConKey
558 ratioTyConName      = tcQual  gHC_REAL FSLIT("Ratio") ratioTyConKey
559 ratioDataConName    = conName gHC_REAL FSLIT(":%") ratioDataConKey
560 realClassName       = clsQual gHC_REAL FSLIT("Real") realClassKey
561 integralClassName   = clsQual gHC_REAL FSLIT("Integral") integralClassKey
562 realFracClassName   = clsQual gHC_REAL FSLIT("RealFrac") realFracClassKey
563 fractionalClassName = clsQual gHC_REAL FSLIT("Fractional") fractionalClassKey
564 fromRationalName    = methName gHC_REAL  FSLIT("fromRational") fromRationalClassOpKey
565
566 -- PrelFloat classes
567 floatingClassName  = clsQual  gHC_FLOAT FSLIT("Floating") floatingClassKey
568 realFloatClassName = clsQual  gHC_FLOAT FSLIT("RealFloat") realFloatClassKey
569
570 -- Class Ix
571 ixClassName = clsQual gHC_ARR FSLIT("Ix") ixClassKey
572
573 -- Class Typeable
574 typeableClassName  = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
575 typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey
576 typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey
577 typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey
578 typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey
579 typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey
580 typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey
581 typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey
582
583 typeableClassNames =    [ typeableClassName, typeable1ClassName, typeable2ClassName
584                         , typeable3ClassName, typeable4ClassName, typeable5ClassName
585                         , typeable6ClassName, typeable7ClassName ]
586
587 -- Class Data
588 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
589
590 -- Error module
591 assertErrorName   = varQual gHC_ERR FSLIT("assertError") assertErrorIdKey
592
593 -- Enum module (Enum, Bounded)
594 enumClassName      = clsQual gHC_ENUM FSLIT("Enum") enumClassKey
595 enumFromName       = methName gHC_ENUM FSLIT("enumFrom") enumFromClassOpKey
596 enumFromToName     = methName gHC_ENUM FSLIT("enumFromTo") enumFromToClassOpKey
597 enumFromThenName   = methName gHC_ENUM FSLIT("enumFromThen") enumFromThenClassOpKey
598 enumFromThenToName = methName gHC_ENUM FSLIT("enumFromThenTo") enumFromThenToClassOpKey
599 boundedClassName   = clsQual gHC_ENUM FSLIT("Bounded") boundedClassKey
600
601 -- List functions
602 concatName        = varQual gHC_LIST FSLIT("concat") concatIdKey
603 filterName        = varQual gHC_LIST FSLIT("filter") filterIdKey
604 zipName           = varQual gHC_LIST FSLIT("zip") zipIdKey
605
606 -- Class Show
607 showClassName     = clsQual gHC_SHOW FSLIT("Show")       showClassKey
608
609 -- Class Read
610 readClassName      = clsQual gHC_READ FSLIT("Read") readClassKey
611
612 -- parallel array types and functions
613 enumFromToPName    = varQual gHC_PARR FSLIT("enumFromToP") enumFromToPIdKey
614 enumFromThenToPName= varQual gHC_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
615 nullPName         = varQual gHC_PARR FSLIT("nullP")              nullPIdKey
616 lengthPName       = varQual gHC_PARR FSLIT("lengthP")            lengthPIdKey
617 replicatePName    = varQual gHC_PARR FSLIT("replicateP")         replicatePIdKey
618 mapPName          = varQual gHC_PARR FSLIT("mapP")               mapPIdKey
619 filterPName       = varQual gHC_PARR FSLIT("filterP")            filterPIdKey
620 zipPName          = varQual gHC_PARR FSLIT("zipP")               zipPIdKey
621 crossMapPName     = varQual gHC_PARR FSLIT("crossMapP")          crossMapPIdKey
622 indexPName        = varQual gHC_PARR FSLIT("!:")                 indexPIdKey
623 toPName           = varQual gHC_PARR FSLIT("toP")                toPIdKey
624 bpermutePName     = varQual gHC_PARR FSLIT("bpermuteP")    bpermutePIdKey
625 bpermuteDftPName  = varQual gHC_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
626 indexOfPName      = varQual gHC_PARR FSLIT("indexOfP")     indexOfPIdKey
627
628 -- IOBase things
629 ioTyConName       = tcQual  gHC_IO_BASE FSLIT("IO") ioTyConKey
630 ioDataConName     = conName gHC_IO_BASE FSLIT("IO") ioDataConKey
631 thenIOName        = varQual gHC_IO_BASE FSLIT("thenIO") thenIOIdKey
632 bindIOName        = varQual gHC_IO_BASE FSLIT("bindIO") bindIOIdKey
633 returnIOName      = varQual gHC_IO_BASE FSLIT("returnIO") returnIOIdKey
634 failIOName        = varQual gHC_IO_BASE FSLIT("failIO") failIOIdKey
635
636 -- IO things
637 printName         = varQual sYSTEM_IO FSLIT("print") printIdKey
638
639 -- Int, Word, and Addr things
640 int8TyConName     = tcQual gHC_INT  FSLIT("Int8") int8TyConKey
641 int16TyConName    = tcQual gHC_INT  FSLIT("Int16") int16TyConKey
642 int32TyConName    = tcQual gHC_INT  FSLIT("Int32") int32TyConKey
643 int64TyConName    = tcQual gHC_INT  FSLIT("Int64") int64TyConKey
644
645 -- Word module
646 word8TyConName    = tcQual  gHC_WORD FSLIT("Word8")  word8TyConKey
647 word16TyConName   = tcQual  gHC_WORD FSLIT("Word16") word16TyConKey
648 word32TyConName   = tcQual  gHC_WORD FSLIT("Word32") word32TyConKey
649 word64TyConName   = tcQual  gHC_WORD FSLIT("Word64") word64TyConKey
650 wordTyConName     = tcQual  gHC_WORD FSLIT("Word")   wordTyConKey
651 wordDataConName   = conName gHC_WORD FSLIT("W#") wordDataConKey
652
653 -- PrelPtr module
654 ptrTyConName      = tcQual   gHC_PTR FSLIT("Ptr") ptrTyConKey
655 funPtrTyConName   = tcQual   gHC_PTR FSLIT("FunPtr") funPtrTyConKey
656
657 -- Foreign objects and weak pointers
658 stablePtrTyConName    = tcQual   gHC_STABLE FSLIT("StablePtr") stablePtrTyConKey
659 newStablePtrName      = varQual  gHC_STABLE FSLIT("newStablePtr") newStablePtrIdKey
660
661 -- PrelST module
662 runSTRepName       = varQual gHC_ST  FSLIT("runSTRep") runSTRepIdKey
663
664 -- Recursive-do notation
665 monadFixClassName  = clsQual mONAD_FIX FSLIT("MonadFix") monadFixClassKey
666 mfixName           = methName mONAD_FIX FSLIT("mfix") mfixIdKey
667
668 -- Arrow notation
669 arrAName           = varQual aRROW FSLIT("arr")   arrAIdKey
670 composeAName       = varQual aRROW FSLIT(">>>")   composeAIdKey
671 firstAName         = varQual aRROW FSLIT("first") firstAIdKey
672 appAName           = varQual aRROW FSLIT("app")   appAIdKey
673 choiceAName        = varQual aRROW FSLIT("|||")   choiceAIdKey
674 loopAName          = varQual aRROW FSLIT("loop")  loopAIdKey
675
676 -- Other classes, needed for type defaulting
677 monadPlusClassName  = clsQual mONAD FSLIT("MonadPlus")  monadPlusClassKey
678 randomClassName     = clsQual rANDOM FSLIT("Random")    randomClassKey
679 randomGenClassName  = clsQual rANDOM FSLIT("RandomGen") randomGenClassKey
680 isStringClassName   = clsQual dATA_STRING FSLIT("IsString") isStringClassKey
681
682 -- dotnet interop
683 objectTyConName     = tcQual   dOTNET FSLIT("Object") objectTyConKey
684         -- objectTyConName was "wTcQual", but that's gone now, and
685         -- I can't see why it was wired in anyway...
686 unmarshalObjectName = varQual  dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
687 marshalObjectName   = varQual  dOTNET FSLIT("marshalObject") marshalObjectIdKey
688 marshalStringName   = varQual  dOTNET FSLIT("marshalString") marshalStringIdKey
689 unmarshalStringName = varQual  dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
690 checkDotnetResName  = varQual  dOTNET FSLIT("checkResult")     checkDotnetResNameIdKey
691
692 -- NDP stuff
693 parrayTyConName     = tcQual   nDP_PARRAY FSLIT("PArray") parrayTyConKey
694 paTyConName         = tcQual   nDP_PARRAY FSLIT("PA")     paTyConKey
695 lengthPAName        = varQual  nDP_PARRAY FSLIT("lengthPA")    lengthPAIdKey
696 replicatePAName     = varQual  nDP_PARRAY FSLIT("replicatePA") replicatePAIdKey
697 emptyPAName         = varQual  nDP_PARRAY FSLIT("emptyPA") emptyPAIdKey
698 closureTyConName    = tcQual   nDP_CLOSURE FSLIT(":->")    closureTyConKey
699 mkClosureName       = varQual  nDP_CLOSURE FSLIT("mkClosure")  mkClosureIdKey
700 applyClosureName    = varQual  nDP_CLOSURE FSLIT("$:")         applyClosureIdKey
701 mkClosurePName      = varQual  nDP_CLOSURE FSLIT("mkClosureP") mkClosurePIdKey
702 applyClosurePName   = varQual  nDP_CLOSURE FSLIT("$:^")        applyClosurePIdKey
703 \end{code}
704
705 %************************************************************************
706 %*                                                                      *
707 \subsection{Local helpers}
708 %*                                                                      *
709 %************************************************************************
710
711 All these are original names; hence mkOrig
712
713 \begin{code}
714 varQual  = mk_known_key_name varName
715 tcQual   = mk_known_key_name tcName
716 clsQual  = mk_known_key_name clsName
717
718 mk_known_key_name space mod str uniq 
719   = mkExternalName uniq mod (mkOccNameFS space str) noSrcSpan
720
721 conName :: Module -> FastString -> Unique -> Name
722 conName mod occ uniq
723   = mkExternalName uniq mod (mkOccNameFS dataName occ) noSrcSpan
724
725 methName :: Module -> FastString -> Unique -> Name
726 methName mod occ uniq
727   = mkExternalName uniq mod (mkVarOccFS occ) noSrcSpan
728 \end{code}
729
730 %************************************************************************
731 %*                                                                      *
732 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
733 %*                                                                      *
734 %************************************************************************
735 --MetaHaskell extension hand allocate keys here
736
737 \begin{code}
738 boundedClassKey         = mkPreludeClassUnique 1 
739 enumClassKey            = mkPreludeClassUnique 2 
740 eqClassKey              = mkPreludeClassUnique 3 
741 floatingClassKey        = mkPreludeClassUnique 5 
742 fractionalClassKey      = mkPreludeClassUnique 6 
743 integralClassKey        = mkPreludeClassUnique 7 
744 monadClassKey           = mkPreludeClassUnique 8 
745 dataClassKey            = mkPreludeClassUnique 9
746 functorClassKey         = mkPreludeClassUnique 10
747 numClassKey             = mkPreludeClassUnique 11
748 ordClassKey             = mkPreludeClassUnique 12
749 readClassKey            = mkPreludeClassUnique 13
750 realClassKey            = mkPreludeClassUnique 14
751 realFloatClassKey       = mkPreludeClassUnique 15
752 realFracClassKey        = mkPreludeClassUnique 16
753 showClassKey            = mkPreludeClassUnique 17
754 ixClassKey              = mkPreludeClassUnique 18
755
756 typeableClassKey        = mkPreludeClassUnique 20
757 typeable1ClassKey       = mkPreludeClassUnique 21
758 typeable2ClassKey       = mkPreludeClassUnique 22
759 typeable3ClassKey       = mkPreludeClassUnique 23
760 typeable4ClassKey       = mkPreludeClassUnique 24
761 typeable5ClassKey       = mkPreludeClassUnique 25
762 typeable6ClassKey       = mkPreludeClassUnique 26
763 typeable7ClassKey       = mkPreludeClassUnique 27
764
765 monadFixClassKey        = mkPreludeClassUnique 28
766
767 monadPlusClassKey       = mkPreludeClassUnique 30
768 randomClassKey          = mkPreludeClassUnique 31
769 randomGenClassKey       = mkPreludeClassUnique 32
770
771 isStringClassKey        = mkPreludeClassUnique 33
772 \end{code}
773
774 %************************************************************************
775 %*                                                                      *
776 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
777 %*                                                                      *
778 %************************************************************************
779
780 \begin{code}
781 addrPrimTyConKey                        = mkPreludeTyConUnique  1
782 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
783 boolTyConKey                            = mkPreludeTyConUnique  4
784 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
785 charPrimTyConKey                        = mkPreludeTyConUnique  7
786 charTyConKey                            = mkPreludeTyConUnique  8
787 doublePrimTyConKey                      = mkPreludeTyConUnique  9
788 doubleTyConKey                          = mkPreludeTyConUnique 10 
789 floatPrimTyConKey                       = mkPreludeTyConUnique 11
790 floatTyConKey                           = mkPreludeTyConUnique 12
791 funTyConKey                             = mkPreludeTyConUnique 13
792 intPrimTyConKey                         = mkPreludeTyConUnique 14
793 intTyConKey                             = mkPreludeTyConUnique 15
794 int8TyConKey                            = mkPreludeTyConUnique 16
795 int16TyConKey                           = mkPreludeTyConUnique 17
796 int32PrimTyConKey                       = mkPreludeTyConUnique 18
797 int32TyConKey                           = mkPreludeTyConUnique 19
798 int64PrimTyConKey                       = mkPreludeTyConUnique 20
799 int64TyConKey                           = mkPreludeTyConUnique 21
800 integerTyConKey                         = mkPreludeTyConUnique 22
801 listTyConKey                            = mkPreludeTyConUnique 23
802 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
803 weakPrimTyConKey                        = mkPreludeTyConUnique 27
804 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
805 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
806 orderingTyConKey                        = mkPreludeTyConUnique 30
807 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
808 ratioTyConKey                           = mkPreludeTyConUnique 32
809 rationalTyConKey                        = mkPreludeTyConUnique 33
810 realWorldTyConKey                       = mkPreludeTyConUnique 34
811 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
812 stablePtrTyConKey                       = mkPreludeTyConUnique 36
813
814 anyPrimTyConKey                         = mkPreludeTyConUnique 37
815 anyPrimTyCon1Key                        = mkPreludeTyConUnique 38
816
817 statePrimTyConKey                       = mkPreludeTyConUnique 50
818 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
819 stableNameTyConKey                      = mkPreludeTyConUnique 52
820 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
821 ioTyConKey                              = mkPreludeTyConUnique 56
822 wordPrimTyConKey                        = mkPreludeTyConUnique 58
823 wordTyConKey                            = mkPreludeTyConUnique 59
824 word8TyConKey                           = mkPreludeTyConUnique 60
825 word16TyConKey                          = mkPreludeTyConUnique 61 
826 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
827 word32TyConKey                          = mkPreludeTyConUnique 63
828 word64PrimTyConKey                      = mkPreludeTyConUnique 64
829 word64TyConKey                          = mkPreludeTyConUnique 65
830 liftedConKey                            = mkPreludeTyConUnique 66
831 unliftedConKey                          = mkPreludeTyConUnique 67
832 anyBoxConKey                            = mkPreludeTyConUnique 68
833 kindConKey                              = mkPreludeTyConUnique 69
834 boxityConKey                            = mkPreludeTyConUnique 70
835 typeConKey                              = mkPreludeTyConUnique 71
836 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
837 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
838 ptrTyConKey                             = mkPreludeTyConUnique 74
839 funPtrTyConKey                          = mkPreludeTyConUnique 75
840 tVarPrimTyConKey                        = mkPreludeTyConUnique 76
841
842 -- Generic Type Constructors
843 crossTyConKey                           = mkPreludeTyConUnique 79
844 plusTyConKey                            = mkPreludeTyConUnique 80
845 genUnitTyConKey                         = mkPreludeTyConUnique 81
846
847 -- Parallel array type constructor
848 parrTyConKey                            = mkPreludeTyConUnique 82
849
850 -- dotnet interop
851 objectTyConKey                          = mkPreludeTyConUnique 83
852
853 eitherTyConKey                          = mkPreludeTyConUnique 84
854
855 -- Super Kinds constructors
856 tySuperKindTyConKey                    = mkPreludeTyConUnique 85
857 coSuperKindTyConKey                    = mkPreludeTyConUnique 86
858
859 -- Kind constructors
860 liftedTypeKindTyConKey                  = mkPreludeTyConUnique 87
861 openTypeKindTyConKey                    = mkPreludeTyConUnique 88
862 unliftedTypeKindTyConKey                = mkPreludeTyConUnique 89
863 ubxTupleKindTyConKey                    = mkPreludeTyConUnique 90
864 argTypeKindTyConKey                     = mkPreludeTyConUnique 91
865
866 -- Coercion constructors
867 symCoercionTyConKey                     = mkPreludeTyConUnique 93
868 transCoercionTyConKey                   = mkPreludeTyConUnique 94
869 leftCoercionTyConKey                    = mkPreludeTyConUnique 95
870 rightCoercionTyConKey                   = mkPreludeTyConUnique 96
871 instCoercionTyConKey                    = mkPreludeTyConUnique 97
872 unsafeCoercionTyConKey                  = mkPreludeTyConUnique 98
873
874 unknownTyConKey                         = mkPreludeTyConUnique 99
875 unknown1TyConKey                        = mkPreludeTyConUnique 130
876 unknown2TyConKey                        = mkPreludeTyConUnique 131
877 unknown3TyConKey                        = mkPreludeTyConUnique 132
878 opaqueTyConKey                          = mkPreludeTyConUnique 133
879
880 stringTyConKey                          = mkPreludeTyConUnique 134
881
882 parrayTyConKey                          = mkPreludeTyConUnique 135
883 closureTyConKey                         = mkPreludeTyConUnique 136
884 paTyConKey                              = mkPreludeTyConUnique 137
885
886
887 ---------------- Template Haskell -------------------
888 --      USES TyConUniques 100-129
889 -----------------------------------------------------
890
891 unitTyConKey = mkTupleTyConUnique Boxed 0
892 \end{code}
893
894 %************************************************************************
895 %*                                                                      *
896 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
897 %*                                                                      *
898 %************************************************************************
899
900 \begin{code}
901 charDataConKey                          = mkPreludeDataConUnique  1
902 consDataConKey                          = mkPreludeDataConUnique  2
903 doubleDataConKey                        = mkPreludeDataConUnique  3
904 falseDataConKey                         = mkPreludeDataConUnique  4
905 floatDataConKey                         = mkPreludeDataConUnique  5
906 intDataConKey                           = mkPreludeDataConUnique  6
907 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
908 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
909 nilDataConKey                           = mkPreludeDataConUnique 11
910 ratioDataConKey                         = mkPreludeDataConUnique 12
911 stableNameDataConKey                    = mkPreludeDataConUnique 14
912 trueDataConKey                          = mkPreludeDataConUnique 15
913 wordDataConKey                          = mkPreludeDataConUnique 16
914 ioDataConKey                            = mkPreludeDataConUnique 17
915
916 -- Generic data constructors
917 crossDataConKey                         = mkPreludeDataConUnique 20
918 inlDataConKey                           = mkPreludeDataConUnique 21
919 inrDataConKey                           = mkPreludeDataConUnique 22
920 genUnitDataConKey                       = mkPreludeDataConUnique 23
921
922 -- Data constructor for parallel arrays
923 parrDataConKey                          = mkPreludeDataConUnique 24
924
925 leftDataConKey                          = mkPreludeDataConUnique 25
926 rightDataConKey                         = mkPreludeDataConUnique 26
927 \end{code}
928
929 %************************************************************************
930 %*                                                                      *
931 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
932 %*                                                                      *
933 %************************************************************************
934
935 \begin{code}
936 absentErrorIdKey              = mkPreludeMiscIdUnique  1
937 augmentIdKey                  = mkPreludeMiscIdUnique  3
938 appendIdKey                   = mkPreludeMiscIdUnique  4
939 buildIdKey                    = mkPreludeMiscIdUnique  5
940 errorIdKey                    = mkPreludeMiscIdUnique  6
941 foldlIdKey                    = mkPreludeMiscIdUnique  7
942 foldrIdKey                    = mkPreludeMiscIdUnique  8
943 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
944 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
945 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
946 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
947 integerZeroIdKey              = mkPreludeMiscIdUnique 13
948 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
949 seqIdKey                      = mkPreludeMiscIdUnique 15
950 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
951 eqStringIdKey                 = mkPreludeMiscIdUnique 17
952 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
953 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
954 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
955 parErrorIdKey                 = mkPreludeMiscIdUnique 21
956 parIdKey                      = mkPreludeMiscIdUnique 22
957 patErrorIdKey                 = mkPreludeMiscIdUnique 23
958 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
959 recConErrorIdKey              = mkPreludeMiscIdUnique 25
960 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
961 traceIdKey                    = mkPreludeMiscIdUnique 27
962 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
963 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
964 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
965 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
966
967 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
968 concatIdKey                   = mkPreludeMiscIdUnique 33
969 filterIdKey                   = mkPreludeMiscIdUnique 34
970 zipIdKey                      = mkPreludeMiscIdUnique 35
971 bindIOIdKey                   = mkPreludeMiscIdUnique 36
972 returnIOIdKey                 = mkPreludeMiscIdUnique 37
973 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
974 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
975 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
976 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
977 printIdKey                    = mkPreludeMiscIdUnique 43
978 failIOIdKey                   = mkPreludeMiscIdUnique 44
979 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
980 voidArgIdKey                  = mkPreludeMiscIdUnique 47
981 fstIdKey                      = mkPreludeMiscIdUnique 49
982 sndIdKey                      = mkPreludeMiscIdUnique 50
983 otherwiseIdKey                = mkPreludeMiscIdUnique 51
984 assertIdKey                   = mkPreludeMiscIdUnique 53
985 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
986
987 rootMainKey                   = mkPreludeMiscIdUnique 55
988 runMainKey                    = mkPreludeMiscIdUnique 56
989
990 andIdKey                      = mkPreludeMiscIdUnique 57
991 orIdKey                       = mkPreludeMiscIdUnique 58
992 thenIOIdKey                   = mkPreludeMiscIdUnique 59
993 lazyIdKey                     = mkPreludeMiscIdUnique 60
994 assertErrorIdKey              = mkPreludeMiscIdUnique 61
995
996 breakpointIdKey               = mkPreludeMiscIdUnique 62
997 breakpointCondIdKey           = mkPreludeMiscIdUnique 63
998 breakpointAutoIdKey           = mkPreludeMiscIdUnique 64
999 breakpointJumpIdKey           = mkPreludeMiscIdUnique 65
1000 breakpointCondJumpIdKey       = mkPreludeMiscIdUnique 66
1001 breakpointAutoJumpIdKey       = mkPreludeMiscIdUnique 67
1002
1003 inlineIdKey                   = mkPreludeMiscIdUnique 68
1004
1005 -- Parallel array functions
1006 nullPIdKey                    = mkPreludeMiscIdUnique 80
1007 lengthPIdKey                  = mkPreludeMiscIdUnique 81
1008 replicatePIdKey               = mkPreludeMiscIdUnique 82
1009 mapPIdKey                     = mkPreludeMiscIdUnique 83
1010 filterPIdKey                  = mkPreludeMiscIdUnique 84
1011 zipPIdKey                     = mkPreludeMiscIdUnique 85
1012 crossMapPIdKey                = mkPreludeMiscIdUnique 86
1013 indexPIdKey                   = mkPreludeMiscIdUnique 87
1014 toPIdKey                      = mkPreludeMiscIdUnique 88
1015 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
1016 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
1017 bpermutePIdKey                = mkPreludeMiscIdUnique 91
1018 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
1019 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
1020
1021 -- dotnet interop
1022 unmarshalObjectIdKey          = mkPreludeMiscIdUnique 94
1023 marshalObjectIdKey            = mkPreludeMiscIdUnique 95
1024 marshalStringIdKey            = mkPreludeMiscIdUnique 96
1025 unmarshalStringIdKey          = mkPreludeMiscIdUnique 97
1026 checkDotnetResNameIdKey       = mkPreludeMiscIdUnique 98
1027
1028 \end{code}
1029
1030 Certain class operations from Prelude classes.  They get their own
1031 uniques so we can look them up easily when we want to conjure them up
1032 during type checking.
1033
1034 \begin{code}
1035         -- Just a place holder for  unbound variables  produced by the renamer:
1036 unboundKey                    = mkPreludeMiscIdUnique 101 
1037
1038 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
1039 minusClassOpKey               = mkPreludeMiscIdUnique 103
1040 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
1041 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
1042 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
1043 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
1044 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
1045 eqClassOpKey                  = mkPreludeMiscIdUnique 109
1046 geClassOpKey                  = mkPreludeMiscIdUnique 110
1047 negateClassOpKey              = mkPreludeMiscIdUnique 111
1048 failMClassOpKey               = mkPreludeMiscIdUnique 112
1049 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
1050 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
1051 returnMClassOpKey             = mkPreludeMiscIdUnique 117
1052
1053 -- Recursive do notation
1054 mfixIdKey       = mkPreludeMiscIdUnique 118
1055
1056 -- Arrow notation
1057 arrAIdKey       = mkPreludeMiscIdUnique 119
1058 composeAIdKey   = mkPreludeMiscIdUnique 120 -- >>>
1059 firstAIdKey     = mkPreludeMiscIdUnique 121
1060 appAIdKey       = mkPreludeMiscIdUnique 122
1061 choiceAIdKey    = mkPreludeMiscIdUnique 123 --  |||
1062 loopAIdKey      = mkPreludeMiscIdUnique 124
1063
1064 fromStringClassOpKey          = mkPreludeMiscIdUnique 125
1065
1066 -- Flattened parallel array functions
1067 mkClosureIdKey                = mkPreludeMiscIdUnique 126
1068 applyClosureIdKey             = mkPreludeMiscIdUnique 127
1069 mkClosurePIdKey               = mkPreludeMiscIdUnique 128
1070 applyClosurePIdKey            = mkPreludeMiscIdUnique 129
1071 closurePAIdKey                = mkPreludeMiscIdUnique 130
1072 lengthPAIdKey                 = mkPreludeMiscIdUnique 131
1073 replicatePAIdKey              = mkPreludeMiscIdUnique 132
1074 emptyPAIdKey                  = mkPreludeMiscIdUnique 133
1075
1076 ---------------- Template Haskell -------------------
1077 --      USES IdUniques 200-399
1078 -----------------------------------------------------
1079 \end{code}
1080
1081
1082 %************************************************************************
1083 %*                                                                      *
1084 \subsection{Standard groups of types}
1085 %*                                                                      *
1086 %************************************************************************
1087
1088 \begin{code}
1089 numericTyKeys = 
1090         [ wordTyConKey
1091         , intTyConKey
1092         , integerTyConKey
1093         , doubleTyConKey
1094         , floatTyConKey
1095         ]
1096 \end{code}
1097
1098
1099 %************************************************************************
1100 %*                                                                      *
1101 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1102 %*                                                                      *
1103 %************************************************************************
1104
1105 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1106 even though every numeric class has these two as a superclass,
1107 because the list of ambiguous dictionaries hasn't been simplified.
1108
1109 \begin{code}
1110 numericClassKeys =
1111         [ numClassKey
1112         , realClassKey
1113         , integralClassKey
1114         ]
1115         ++ fractionalClassKeys
1116
1117 fractionalClassKeys = 
1118         [ fractionalClassKey
1119         , floatingClassKey
1120         , realFracClassKey
1121         , realFloatClassKey
1122         ]
1123
1124         -- the strictness analyser needs to know about numeric types
1125         -- (see SaAbsInt.lhs)
1126 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1127         [ readClassKey
1128         ]
1129
1130 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1131 -- and are: "classes defined in the Prelude or a standard library"
1132 standardClassKeys = derivableClassKeys ++ numericClassKeys
1133                   ++ [randomClassKey, randomGenClassKey,
1134                       functorClassKey, 
1135                       monadClassKey, monadPlusClassKey,
1136                       isStringClassKey
1137                      ]
1138 \end{code}
1139
1140 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1141 (@TcDeriv@).
1142
1143 \begin{code}
1144 derivableClassKeys
1145   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1146       boundedClassKey, showClassKey, readClassKey ]
1147 \end{code}
1148