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