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