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