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