2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[PrelNames]{Definitions of prelude modules and names}
7 Nota Bene: all Names defined in here should come from the base package
9 - ModuleNames for prelude modules,
10 e.g. pREL_BASE_Name :: ModuleName
12 - Modules for prelude modules
13 e.g. pREL_Base :: Module
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
20 - Names for Ids, DataCons, TyCons and Classes that the compiler
21 "knows about" in some way
22 e.g. intTyConName :: Name
24 One of these Names contains
25 (a) the module and occurrence name of the thing
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.
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
40 Unique, Uniquable(..), hasKey, -- Re-exported for convenience
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
50 #include "HsVersions.h"
54 import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
55 import Unique ( Unique, Uniquable(..), hasKey,
56 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
57 mkPreludeTyConUnique, mkPreludeClassUnique,
60 import BasicTypes ( Boxity(..), Arity )
61 import Name ( Name, mkInternalName, mkExternalName )
67 %************************************************************************
69 \subsection{Local Names}
71 %************************************************************************
73 This *local* name is used by the interactive stuff
76 itName :: Unique -> Name
77 itName uniq = mkInternalName uniq (mkOccNameFS varName (fsLit "it")) noSrcSpan
81 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
82 -- during compiler debugging.
83 mkUnboundName :: RdrName -> Name
84 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcSpan
86 isUnboundName :: Name -> Bool
87 isUnboundName name = name `hasKey` unboundKey
91 %************************************************************************
93 \subsection{Known key Names}
95 %************************************************************************
97 This section tells what the compiler knows about the assocation of
98 names with uniques. These ones are the *non* wired-in ones. The
99 wired in ones are defined in TysWiredIn etc.
102 basicKnownKeyNames :: [Name]
105 ++ typeableClassNames
106 ++ [ -- Type constructors (synonyms especially)
107 ioTyConName, ioDataConName,
114 integerTyConName, smallIntegerName,
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
126 realClassName, -- numeric
127 integralClassName, -- numeric
128 fractionalClassName, -- numeric
129 floatingClassName, -- numeric
130 realFracClassName, -- numeric
131 realFloatClassName, -- numeric
136 negateName, minusName,
137 fromRationalName, fromIntegerName,
144 enumFromName, enumFromThenName,
145 enumFromThenToName, enumFromToName,
146 enumFromToPName, enumFromThenToPName,
149 thenIOName, bindIOName, returnIOName, failIOName,
150 failMName, bindMName, thenMName, returnMName,
156 arrAName, composeAName, firstAName,
157 appAName, choiceAName, loopAName,
175 unpackCStringName, unpackCStringAppendName,
176 unpackCStringFoldrName, unpackCStringUtf8Name,
179 concatName, filterName, mapName,
180 zipName, foldrName, buildName, augmentName, appendName,
182 -- Parallel array operations
183 nullPName, lengthPName, replicatePName, singletonPName, mapPName,
184 filterPName, zipPName, crossMapPName, indexPName,
185 toPName, bpermutePName, bpermuteDftPName, indexOfPName,
187 -- FFI primitive types that are not wired-in.
188 stablePtrTyConName, ptrTyConName, funPtrTyConName,
189 int8TyConName, int16TyConName, int32TyConName, int64TyConName,
190 wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
193 otherwiseIdName, inlineIdName,
194 plusIntegerName, timesIntegerName,
195 eqStringName, assertName, breakpointName, breakpointCondName,
196 breakpointAutoName, opaqueTyConName,
197 assertErrorName, runSTRepName,
198 printName, fstName, sndName,
201 monadFixClassName, mfixName,
204 randomClassName, randomGenClassName, monadPlusClassName,
210 , eitherTyConName, leftDataConName, rightDataConName
213 , objectTyConName, marshalObjectName, unmarshalObjectName
214 , marshalStringName, unmarshalStringName, checkDotnetResName
217 genericTyConNames :: [Name]
218 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
222 %************************************************************************
224 \subsection{Module names}
226 %************************************************************************
229 --MetaHaskell Extension Add a new module here
232 pRELUDE = mkBaseModule_ pRELUDE_NAME
234 gHC_PRIM, gHC_TYPES, gHC_BOOL, gHC_UNIT, gHC_ORDERING, gHC_GENERICS, gHC_BASE, gHC_ENUM,
235 gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_LIST, gHC_PARR,
236 gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING, gHC_PACK, gHC_CONC, gHC_IO_BASE,
237 gHC_ST, gHC_ARR, gHC_STABLE, gHC_ADDR, gHC_PTR, gHC_ERR, gHC_REAL,
238 gHC_FLOAT, gHC_TOP_HANDLER, sYSTEM_IO, dYNAMIC, tYPEABLE, gENERICS,
239 dOTNET, rEAD_PREC, lEX, gHC_INT, gHC_WORD, mONAD, mONAD_FIX, aRROW,
240 gHC_DESUGAR, rANDOM, gHC_EXTS, cONTROL_EXCEPTION :: Module
241 gHC_PRIM = mkPrimModule (fsLit "GHC.Prim") -- Primitive types and values
242 gHC_TYPES = mkPrimModule (fsLit "GHC.Types")
243 gHC_UNIT = mkPrimModule (fsLit "GHC.Unit")
244 gHC_BOOL = mkPrimModule (fsLit "GHC.Bool")
245 gHC_ORDERING = mkPrimModule (fsLit "GHC.Ordering")
246 gHC_GENERICS = mkPrimModule (fsLit "GHC.Generics")
247 gHC_BASE = mkBaseModule (fsLit "GHC.Base")
248 gHC_ENUM = mkBaseModule (fsLit "GHC.Enum")
249 gHC_SHOW = mkBaseModule (fsLit "GHC.Show")
250 gHC_READ = mkBaseModule (fsLit "GHC.Read")
251 gHC_NUM = mkBaseModule (fsLit "GHC.Num")
252 gHC_INTEGER = mkIntegerModule (fsLit "GHC.Integer")
253 gHC_LIST = mkBaseModule (fsLit "GHC.List")
254 gHC_PARR = mkBaseModule (fsLit "GHC.PArr")
255 gHC_TUPLE = mkPrimModule (fsLit "GHC.Tuple")
256 dATA_TUPLE = mkBaseModule (fsLit "Data.Tuple")
257 dATA_EITHER = mkBaseModule (fsLit "Data.Either")
258 dATA_STRING = mkBaseModule (fsLit "Data.String")
259 gHC_PACK = mkBaseModule (fsLit "GHC.Pack")
260 gHC_CONC = mkBaseModule (fsLit "GHC.Conc")
261 gHC_IO_BASE = mkBaseModule (fsLit "GHC.IOBase")
262 gHC_ST = mkBaseModule (fsLit "GHC.ST")
263 gHC_ARR = mkBaseModule (fsLit "GHC.Arr")
264 gHC_STABLE = mkBaseModule (fsLit "GHC.Stable")
265 gHC_ADDR = mkBaseModule (fsLit "GHC.Addr")
266 gHC_PTR = mkBaseModule (fsLit "GHC.Ptr")
267 gHC_ERR = mkBaseModule (fsLit "GHC.Err")
268 gHC_REAL = mkBaseModule (fsLit "GHC.Real")
269 gHC_FLOAT = mkBaseModule (fsLit "GHC.Float")
270 gHC_TOP_HANDLER = mkBaseModule (fsLit "GHC.TopHandler")
271 sYSTEM_IO = mkBaseModule (fsLit "System.IO")
272 dYNAMIC = mkBaseModule (fsLit "Data.Dynamic")
273 tYPEABLE = mkBaseModule (fsLit "Data.Typeable")
274 gENERICS = mkBaseModule (fsLit "Data.Generics.Basics")
275 dOTNET = mkBaseModule (fsLit "GHC.Dotnet")
276 rEAD_PREC = mkBaseModule (fsLit "Text.ParserCombinators.ReadPrec")
277 lEX = mkBaseModule (fsLit "Text.Read.Lex")
278 gHC_INT = mkBaseModule (fsLit "GHC.Int")
279 gHC_WORD = mkBaseModule (fsLit "GHC.Word")
280 mONAD = mkBaseModule (fsLit "Control.Monad")
281 mONAD_FIX = mkBaseModule (fsLit "Control.Monad.Fix")
282 aRROW = mkBaseModule (fsLit "Control.Arrow")
283 gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
284 rANDOM = mkBaseModule (fsLit "System.Random")
285 gHC_EXTS = mkBaseModule (fsLit "GHC.Exts")
286 cONTROL_EXCEPTION = mkBaseModule (fsLit "Control.Exception")
288 mAIN, rOOT_MAIN :: Module
289 mAIN = mkMainModule_ mAIN_NAME
290 rOOT_MAIN = mkMainModule (fsLit ":Main") -- Root module for initialisation
292 -- The ':xxx' makes a module name that the user can never
293 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
294 -- module name still starts with a capital letter, which keeps
295 -- the z-encoded version consistent.
296 iNTERACTIVE, thFAKE :: Module
297 iNTERACTIVE = mkMainModule (fsLit ":Interactive")
298 thFAKE = mkMainModule (fsLit ":THFake")
300 pRELUDE_NAME, mAIN_NAME :: ModuleName
301 pRELUDE_NAME = mkModuleNameFS (fsLit "Prelude")
302 mAIN_NAME = mkModuleNameFS (fsLit "Main")
304 mkPrimModule :: FastString -> Module
305 mkPrimModule m = mkModule primPackageId (mkModuleNameFS m)
307 mkIntegerModule :: FastString -> Module
308 mkIntegerModule m = mkModule integerPackageId (mkModuleNameFS m)
310 mkBaseModule :: FastString -> Module
311 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
313 mkBaseModule_ :: ModuleName -> Module
314 mkBaseModule_ m = mkModule basePackageId m
316 mkMainModule :: FastString -> Module
317 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
319 mkMainModule_ :: ModuleName -> Module
320 mkMainModule_ m = mkModule mainPackageId m
323 %************************************************************************
325 \subsection{Constructing the names of tuples
327 %************************************************************************
330 mkTupleModule :: Boxity -> Arity -> Module
331 mkTupleModule Boxed 0 = gHC_UNIT
332 mkTupleModule Boxed _ = gHC_TUPLE
333 mkTupleModule Unboxed _ = gHC_PRIM
337 %************************************************************************
341 %************************************************************************
344 main_RDR_Unqual :: RdrName
345 main_RDR_Unqual = mkUnqual varName (fsLit "main")
346 -- We definitely don't want an Orig RdrName, because
347 -- main might, in principle, be imported into module Main
349 forall_tv_RDR, dot_tv_RDR :: RdrName
350 forall_tv_RDR = mkUnqual tvName (fsLit "forall")
351 dot_tv_RDR = mkUnqual tvName (fsLit ".")
353 eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
354 ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
355 eq_RDR = nameRdrName eqName
356 ge_RDR = nameRdrName geName
357 ne_RDR = varQual_RDR gHC_BASE (fsLit "/=")
358 le_RDR = varQual_RDR gHC_BASE (fsLit "<=")
359 lt_RDR = varQual_RDR gHC_BASE (fsLit "<")
360 gt_RDR = varQual_RDR gHC_BASE (fsLit ">")
361 compare_RDR = varQual_RDR gHC_BASE (fsLit "compare")
362 ltTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "LT")
363 eqTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "EQ")
364 gtTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "GT")
366 eqClass_RDR, numClass_RDR, ordClass_RDR, enumClass_RDR, monadClass_RDR
368 eqClass_RDR = nameRdrName eqClassName
369 numClass_RDR = nameRdrName numClassName
370 ordClass_RDR = nameRdrName ordClassName
371 enumClass_RDR = nameRdrName enumClassName
372 monadClass_RDR = nameRdrName monadClassName
374 map_RDR, append_RDR :: RdrName
375 map_RDR = varQual_RDR gHC_BASE (fsLit "map")
376 append_RDR = varQual_RDR gHC_BASE (fsLit "++")
378 foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR :: RdrName
379 foldr_RDR = nameRdrName foldrName
380 build_RDR = nameRdrName buildName
381 returnM_RDR = nameRdrName returnMName
382 bindM_RDR = nameRdrName bindMName
383 failM_RDR = nameRdrName failMName
386 and_RDR = nameRdrName andName
388 left_RDR, right_RDR :: RdrName
389 left_RDR = nameRdrName leftDataConName
390 right_RDR = nameRdrName rightDataConName
392 fromEnum_RDR, toEnum_RDR :: RdrName
393 fromEnum_RDR = varQual_RDR gHC_ENUM (fsLit "fromEnum")
394 toEnum_RDR = varQual_RDR gHC_ENUM (fsLit "toEnum")
396 enumFrom_RDR, enumFromTo_RDR, enumFromThen_RDR, enumFromThenTo_RDR :: RdrName
397 enumFrom_RDR = nameRdrName enumFromName
398 enumFromTo_RDR = nameRdrName enumFromToName
399 enumFromThen_RDR = nameRdrName enumFromThenName
400 enumFromThenTo_RDR = nameRdrName enumFromThenToName
402 ratioDataCon_RDR, plusInteger_RDR, timesInteger_RDR :: RdrName
403 ratioDataCon_RDR = nameRdrName ratioDataConName
404 plusInteger_RDR = nameRdrName plusIntegerName
405 timesInteger_RDR = nameRdrName timesIntegerName
407 ioDataCon_RDR :: RdrName
408 ioDataCon_RDR = nameRdrName ioDataConName
410 eqString_RDR, unpackCString_RDR, unpackCStringFoldr_RDR,
411 unpackCStringUtf8_RDR :: RdrName
412 eqString_RDR = nameRdrName eqStringName
413 unpackCString_RDR = nameRdrName unpackCStringName
414 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
415 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
417 newStablePtr_RDR, wordDataCon_RDR :: RdrName
418 newStablePtr_RDR = nameRdrName newStablePtrName
419 wordDataCon_RDR = dataQual_RDR gHC_WORD (fsLit "W#")
421 bindIO_RDR, returnIO_RDR :: RdrName
422 bindIO_RDR = nameRdrName bindIOName
423 returnIO_RDR = nameRdrName returnIOName
425 fromInteger_RDR, fromRational_RDR, minus_RDR, times_RDR, plus_RDR :: RdrName
426 fromInteger_RDR = nameRdrName fromIntegerName
427 fromRational_RDR = nameRdrName fromRationalName
428 minus_RDR = nameRdrName minusName
429 times_RDR = varQual_RDR gHC_NUM (fsLit "*")
430 plus_RDR = varQual_RDR gHC_NUM (fsLit "+")
432 fromString_RDR :: RdrName
433 fromString_RDR = nameRdrName fromStringName
435 compose_RDR :: RdrName
436 compose_RDR = varQual_RDR gHC_BASE (fsLit ".")
438 not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
439 range_RDR, inRange_RDR, index_RDR,
440 unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
441 not_RDR = varQual_RDR gHC_BASE (fsLit "not")
442 getTag_RDR = varQual_RDR gHC_BASE (fsLit "getTag")
443 succ_RDR = varQual_RDR gHC_ENUM (fsLit "succ")
444 pred_RDR = varQual_RDR gHC_ENUM (fsLit "pred")
445 minBound_RDR = varQual_RDR gHC_ENUM (fsLit "minBound")
446 maxBound_RDR = varQual_RDR gHC_ENUM (fsLit "maxBound")
447 range_RDR = varQual_RDR gHC_ARR (fsLit "range")
448 inRange_RDR = varQual_RDR gHC_ARR (fsLit "inRange")
449 index_RDR = varQual_RDR gHC_ARR (fsLit "index")
450 unsafeIndex_RDR = varQual_RDR gHC_ARR (fsLit "unsafeIndex")
451 unsafeRangeSize_RDR = varQual_RDR gHC_ARR (fsLit "unsafeRangeSize")
453 readList_RDR, readListDefault_RDR, readListPrec_RDR, readListPrecDefault_RDR,
454 readPrec_RDR, parens_RDR, choose_RDR, lexP_RDR :: RdrName
455 readList_RDR = varQual_RDR gHC_READ (fsLit "readList")
456 readListDefault_RDR = varQual_RDR gHC_READ (fsLit "readListDefault")
457 readListPrec_RDR = varQual_RDR gHC_READ (fsLit "readListPrec")
458 readListPrecDefault_RDR = varQual_RDR gHC_READ (fsLit "readListPrecDefault")
459 readPrec_RDR = varQual_RDR gHC_READ (fsLit "readPrec")
460 parens_RDR = varQual_RDR gHC_READ (fsLit "parens")
461 choose_RDR = varQual_RDR gHC_READ (fsLit "choose")
462 lexP_RDR = varQual_RDR gHC_READ (fsLit "lexP")
464 punc_RDR, ident_RDR, symbol_RDR :: RdrName
465 punc_RDR = dataQual_RDR lEX (fsLit "Punc")
466 ident_RDR = dataQual_RDR lEX (fsLit "Ident")
467 symbol_RDR = dataQual_RDR lEX (fsLit "Symbol")
469 step_RDR, alt_RDR, reset_RDR, prec_RDR :: RdrName
470 step_RDR = varQual_RDR rEAD_PREC (fsLit "step")
471 alt_RDR = varQual_RDR rEAD_PREC (fsLit "+++")
472 reset_RDR = varQual_RDR rEAD_PREC (fsLit "reset")
473 prec_RDR = varQual_RDR rEAD_PREC (fsLit "prec")
475 showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR,
476 showSpace_RDR, showParen_RDR :: RdrName
477 showList_RDR = varQual_RDR gHC_SHOW (fsLit "showList")
478 showList___RDR = varQual_RDR gHC_SHOW (fsLit "showList__")
479 showsPrec_RDR = varQual_RDR gHC_SHOW (fsLit "showsPrec")
480 showString_RDR = varQual_RDR gHC_SHOW (fsLit "showString")
481 showSpace_RDR = varQual_RDR gHC_SHOW (fsLit "showSpace")
482 showParen_RDR = varQual_RDR gHC_SHOW (fsLit "showParen")
484 typeOf_RDR, mkTypeRep_RDR, mkTyConRep_RDR :: RdrName
485 typeOf_RDR = varQual_RDR tYPEABLE (fsLit "typeOf")
486 mkTypeRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyConApp")
487 mkTyConRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyCon")
489 undefined_RDR :: RdrName
490 undefined_RDR = varQual_RDR gHC_ERR (fsLit "undefined")
492 crossDataCon_RDR, inlDataCon_RDR, inrDataCon_RDR, genUnitDataCon_RDR :: RdrName
493 crossDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit ":*:")
494 inlDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inl")
495 inrDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inr")
496 genUnitDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Unit")
498 ----------------------
499 varQual_RDR, tcQual_RDR, clsQual_RDR, dataQual_RDR
500 :: Module -> FastString -> RdrName
501 varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str)
502 tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str)
503 clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str)
504 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
507 %************************************************************************
509 \subsection{Known-key names}
511 %************************************************************************
513 Many of these Names are not really "built in", but some parts of the
514 compiler (notably the deriving mechanism) need to mention their names,
515 and it's convenient to write them all down in one place.
517 --MetaHaskell Extension add the constrs and the lower case case
518 -- guys as well (perhaps) e.g. see trueDataConName below
522 runMainIOName :: Name
523 runMainIOName = varQual gHC_TOP_HANDLER (fsLit "runMainIO") runMainKey
525 orderingTyConName :: Name
526 orderingTyConName = tcQual gHC_ORDERING (fsLit "Ordering") orderingTyConKey
528 eitherTyConName, leftDataConName, rightDataConName :: Name
529 eitherTyConName = tcQual dATA_EITHER (fsLit "Either") eitherTyConKey
530 leftDataConName = conName dATA_EITHER (fsLit "Left") leftDataConKey
531 rightDataConName = conName dATA_EITHER (fsLit "Right") rightDataConKey
534 crossTyConName, plusTyConName, genUnitTyConName :: Name
535 crossTyConName = tcQual gHC_GENERICS (fsLit ":*:") crossTyConKey
536 plusTyConName = tcQual gHC_GENERICS (fsLit ":+:") plusTyConKey
537 genUnitTyConName = tcQual gHC_GENERICS (fsLit "Unit") genUnitTyConKey
539 -- Base strings Strings
540 unpackCStringName, unpackCStringAppendName, unpackCStringFoldrName,
541 unpackCStringUtf8Name, eqStringName, stringTyConName :: Name
542 unpackCStringName = varQual gHC_BASE (fsLit "unpackCString#") unpackCStringIdKey
543 unpackCStringAppendName = varQual gHC_BASE (fsLit "unpackAppendCString#") unpackCStringAppendIdKey
544 unpackCStringFoldrName = varQual gHC_BASE (fsLit "unpackFoldrCString#") unpackCStringFoldrIdKey
545 unpackCStringUtf8Name = varQual gHC_BASE (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
546 eqStringName = varQual gHC_BASE (fsLit "eqString") eqStringIdKey
547 stringTyConName = tcQual gHC_BASE (fsLit "String") stringTyConKey
549 -- The 'inline' function
551 inlineIdName = varQual gHC_BASE (fsLit "inline") inlineIdKey
553 -- Base classes (Eq, Ord, Functor)
554 eqClassName, eqName, ordClassName, geName, functorClassName :: Name
555 eqClassName = clsQual gHC_BASE (fsLit "Eq") eqClassKey
556 eqName = methName gHC_BASE (fsLit "==") eqClassOpKey
557 ordClassName = clsQual gHC_BASE (fsLit "Ord") ordClassKey
558 geName = methName gHC_BASE (fsLit ">=") geClassOpKey
559 functorClassName = clsQual gHC_BASE (fsLit "Functor") functorClassKey
562 monadClassName, thenMName, bindMName, returnMName, failMName :: Name
563 monadClassName = clsQual gHC_BASE (fsLit "Monad") monadClassKey
564 thenMName = methName gHC_BASE (fsLit ">>") thenMClassOpKey
565 bindMName = methName gHC_BASE (fsLit ">>=") bindMClassOpKey
566 returnMName = methName gHC_BASE (fsLit "return") returnMClassOpKey
567 failMName = methName gHC_BASE (fsLit "fail") failMClassOpKey
569 -- Functions for GHC extensions
570 groupWithName :: Name
571 groupWithName = varQual gHC_EXTS (fsLit "groupWith") groupWithIdKey
573 -- Random PrelBase functions
574 fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
575 mapName, appendName, andName, orName, assertName,
576 breakpointName, breakpointCondName, breakpointAutoName,
577 opaqueTyConName :: Name
578 fromStringName = methName dATA_STRING (fsLit "fromString") fromStringClassOpKey
579 otherwiseIdName = varQual gHC_BASE (fsLit "otherwise") otherwiseIdKey
580 foldrName = varQual gHC_BASE (fsLit "foldr") foldrIdKey
581 buildName = varQual gHC_BASE (fsLit "build") buildIdKey
582 augmentName = varQual gHC_BASE (fsLit "augment") augmentIdKey
583 mapName = varQual gHC_BASE (fsLit "map") mapIdKey
584 appendName = varQual gHC_BASE (fsLit "++") appendIdKey
585 andName = varQual gHC_BASE (fsLit "&&") andIdKey
586 orName = varQual gHC_BASE (fsLit "||") orIdKey
587 assertName = varQual gHC_BASE (fsLit "assert") assertIdKey
588 breakpointName = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
589 breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
590 breakpointAutoName= varQual gHC_BASE (fsLit "breakpointAuto") breakpointAutoIdKey
591 opaqueTyConName = tcQual gHC_BASE (fsLit "Opaque") opaqueTyConKey
593 breakpointJumpName :: Name
597 (mkOccNameFS varName (fsLit "breakpointJump"))
599 breakpointCondJumpName :: Name
600 breakpointCondJumpName
602 breakpointCondJumpIdKey
603 (mkOccNameFS varName (fsLit "breakpointCondJump"))
605 breakpointAutoJumpName :: Name
606 breakpointAutoJumpName
608 breakpointAutoJumpIdKey
609 (mkOccNameFS varName (fsLit "breakpointAutoJump"))
613 fstName, sndName :: Name
614 fstName = varQual dATA_TUPLE (fsLit "fst") fstIdKey
615 sndName = varQual dATA_TUPLE (fsLit "snd") sndIdKey
618 numClassName, fromIntegerName, minusName, negateName, plusIntegerName,
619 timesIntegerName, integerTyConName, smallIntegerName :: Name
620 numClassName = clsQual gHC_NUM (fsLit "Num") numClassKey
621 fromIntegerName = methName gHC_NUM (fsLit "fromInteger") fromIntegerClassOpKey
622 minusName = methName gHC_NUM (fsLit "-") minusClassOpKey
623 negateName = methName gHC_NUM (fsLit "negate") negateClassOpKey
624 plusIntegerName = varQual gHC_INTEGER (fsLit "plusInteger") plusIntegerIdKey
625 timesIntegerName = varQual gHC_INTEGER (fsLit "timesInteger") timesIntegerIdKey
626 integerTyConName = tcQual gHC_INTEGER (fsLit "Integer") integerTyConKey
627 smallIntegerName = varQual gHC_INTEGER (fsLit "smallInteger") smallIntegerIdKey
629 -- PrelReal types and classes
630 rationalTyConName, ratioTyConName, ratioDataConName, realClassName,
631 integralClassName, realFracClassName, fractionalClassName,
632 fromRationalName :: Name
633 rationalTyConName = tcQual gHC_REAL (fsLit "Rational") rationalTyConKey
634 ratioTyConName = tcQual gHC_REAL (fsLit "Ratio") ratioTyConKey
635 ratioDataConName = conName gHC_REAL (fsLit ":%") ratioDataConKey
636 realClassName = clsQual gHC_REAL (fsLit "Real") realClassKey
637 integralClassName = clsQual gHC_REAL (fsLit "Integral") integralClassKey
638 realFracClassName = clsQual gHC_REAL (fsLit "RealFrac") realFracClassKey
639 fractionalClassName = clsQual gHC_REAL (fsLit "Fractional") fractionalClassKey
640 fromRationalName = methName gHC_REAL (fsLit "fromRational") fromRationalClassOpKey
643 floatingClassName, realFloatClassName :: Name
644 floatingClassName = clsQual gHC_FLOAT (fsLit "Floating") floatingClassKey
645 realFloatClassName = clsQual gHC_FLOAT (fsLit "RealFloat") realFloatClassKey
649 ixClassName = clsQual gHC_ARR (fsLit "Ix") ixClassKey
652 typeableClassName, typeable1ClassName, typeable2ClassName,
653 typeable3ClassName, typeable4ClassName, typeable5ClassName,
654 typeable6ClassName, typeable7ClassName :: Name
655 typeableClassName = clsQual tYPEABLE (fsLit "Typeable") typeableClassKey
656 typeable1ClassName = clsQual tYPEABLE (fsLit "Typeable1") typeable1ClassKey
657 typeable2ClassName = clsQual tYPEABLE (fsLit "Typeable2") typeable2ClassKey
658 typeable3ClassName = clsQual tYPEABLE (fsLit "Typeable3") typeable3ClassKey
659 typeable4ClassName = clsQual tYPEABLE (fsLit "Typeable4") typeable4ClassKey
660 typeable5ClassName = clsQual tYPEABLE (fsLit "Typeable5") typeable5ClassKey
661 typeable6ClassName = clsQual tYPEABLE (fsLit "Typeable6") typeable6ClassKey
662 typeable7ClassName = clsQual tYPEABLE (fsLit "Typeable7") typeable7ClassKey
664 typeableClassNames :: [Name]
665 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
666 , typeable3ClassName, typeable4ClassName, typeable5ClassName
667 , typeable6ClassName, typeable7ClassName ]
670 dataClassName :: Name
671 dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
674 assertErrorName :: Name
675 assertErrorName = varQual gHC_IO_BASE (fsLit "assertError") assertErrorIdKey
677 -- Enum module (Enum, Bounded)
678 enumClassName, enumFromName, enumFromToName, enumFromThenName,
679 enumFromThenToName, boundedClassName :: Name
680 enumClassName = clsQual gHC_ENUM (fsLit "Enum") enumClassKey
681 enumFromName = methName gHC_ENUM (fsLit "enumFrom") enumFromClassOpKey
682 enumFromToName = methName gHC_ENUM (fsLit "enumFromTo") enumFromToClassOpKey
683 enumFromThenName = methName gHC_ENUM (fsLit "enumFromThen") enumFromThenClassOpKey
684 enumFromThenToName = methName gHC_ENUM (fsLit "enumFromThenTo") enumFromThenToClassOpKey
685 boundedClassName = clsQual gHC_ENUM (fsLit "Bounded") boundedClassKey
688 concatName, filterName, zipName :: Name
689 concatName = varQual gHC_LIST (fsLit "concat") concatIdKey
690 filterName = varQual gHC_LIST (fsLit "filter") filterIdKey
691 zipName = varQual gHC_LIST (fsLit "zip") zipIdKey
694 showClassName :: Name
695 showClassName = clsQual gHC_SHOW (fsLit "Show") showClassKey
698 readClassName :: Name
699 readClassName = clsQual gHC_READ (fsLit "Read") readClassKey
701 -- parallel array types and functions
702 enumFromToPName, enumFromThenToPName, nullPName, lengthPName,
703 singletonPName, replicatePName, mapPName, filterPName,
704 zipPName, crossMapPName, indexPName, toPName, bpermutePName,
705 bpermuteDftPName, indexOfPName :: Name
706 enumFromToPName = varQual gHC_PARR (fsLit "enumFromToP") enumFromToPIdKey
707 enumFromThenToPName= varQual gHC_PARR (fsLit "enumFromThenToP") enumFromThenToPIdKey
708 nullPName = varQual gHC_PARR (fsLit "nullP") nullPIdKey
709 lengthPName = varQual gHC_PARR (fsLit "lengthP") lengthPIdKey
710 singletonPName = varQual gHC_PARR (fsLit "singletonP") singletonPIdKey
711 replicatePName = varQual gHC_PARR (fsLit "replicateP") replicatePIdKey
712 mapPName = varQual gHC_PARR (fsLit "mapP") mapPIdKey
713 filterPName = varQual gHC_PARR (fsLit "filterP") filterPIdKey
714 zipPName = varQual gHC_PARR (fsLit "zipP") zipPIdKey
715 crossMapPName = varQual gHC_PARR (fsLit "crossMapP") crossMapPIdKey
716 indexPName = varQual gHC_PARR (fsLit "!:") indexPIdKey
717 toPName = varQual gHC_PARR (fsLit "toP") toPIdKey
718 bpermutePName = varQual gHC_PARR (fsLit "bpermuteP") bpermutePIdKey
719 bpermuteDftPName = varQual gHC_PARR (fsLit "bpermuteDftP") bpermuteDftPIdKey
720 indexOfPName = varQual gHC_PARR (fsLit "indexOfP") indexOfPIdKey
723 ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
725 ioTyConName = tcQual gHC_IO_BASE (fsLit "IO") ioTyConKey
726 ioDataConName = conName gHC_IO_BASE (fsLit "IO") ioDataConKey
727 thenIOName = varQual gHC_IO_BASE (fsLit "thenIO") thenIOIdKey
728 bindIOName = varQual gHC_IO_BASE (fsLit "bindIO") bindIOIdKey
729 returnIOName = varQual gHC_IO_BASE (fsLit "returnIO") returnIOIdKey
730 failIOName = varQual gHC_IO_BASE (fsLit "failIO") failIOIdKey
734 printName = varQual sYSTEM_IO (fsLit "print") printIdKey
736 -- Int, Word, and Addr things
737 int8TyConName, int16TyConName, int32TyConName, int64TyConName :: Name
738 int8TyConName = tcQual gHC_INT (fsLit "Int8") int8TyConKey
739 int16TyConName = tcQual gHC_INT (fsLit "Int16") int16TyConKey
740 int32TyConName = tcQual gHC_INT (fsLit "Int32") int32TyConKey
741 int64TyConName = tcQual gHC_INT (fsLit "Int64") int64TyConKey
744 word8TyConName, word16TyConName, word32TyConName, word64TyConName,
745 wordTyConName, wordDataConName :: Name
746 word8TyConName = tcQual gHC_WORD (fsLit "Word8") word8TyConKey
747 word16TyConName = tcQual gHC_WORD (fsLit "Word16") word16TyConKey
748 word32TyConName = tcQual gHC_WORD (fsLit "Word32") word32TyConKey
749 word64TyConName = tcQual gHC_WORD (fsLit "Word64") word64TyConKey
750 wordTyConName = tcQual gHC_WORD (fsLit "Word") wordTyConKey
751 wordDataConName = conName gHC_WORD (fsLit "W#") wordDataConKey
754 ptrTyConName, funPtrTyConName :: Name
755 ptrTyConName = tcQual gHC_PTR (fsLit "Ptr") ptrTyConKey
756 funPtrTyConName = tcQual gHC_PTR (fsLit "FunPtr") funPtrTyConKey
758 -- Foreign objects and weak pointers
759 stablePtrTyConName, newStablePtrName :: Name
760 stablePtrTyConName = tcQual gHC_STABLE (fsLit "StablePtr") stablePtrTyConKey
761 newStablePtrName = varQual gHC_STABLE (fsLit "newStablePtr") newStablePtrIdKey
765 runSTRepName = varQual gHC_ST (fsLit "runSTRep") runSTRepIdKey
767 -- Recursive-do notation
768 monadFixClassName, mfixName :: Name
769 monadFixClassName = clsQual mONAD_FIX (fsLit "MonadFix") monadFixClassKey
770 mfixName = methName mONAD_FIX (fsLit "mfix") mfixIdKey
773 arrAName, composeAName, firstAName, appAName, choiceAName, loopAName :: Name
774 arrAName = varQual aRROW (fsLit "arr") arrAIdKey
775 composeAName = varQual gHC_DESUGAR (fsLit ">>>") composeAIdKey
776 firstAName = varQual aRROW (fsLit "first") firstAIdKey
777 appAName = varQual aRROW (fsLit "app") appAIdKey
778 choiceAName = varQual aRROW (fsLit "|||") choiceAIdKey
779 loopAName = varQual aRROW (fsLit "loop") loopAIdKey
781 -- Other classes, needed for type defaulting
782 monadPlusClassName, randomClassName, randomGenClassName,
783 isStringClassName :: Name
784 monadPlusClassName = clsQual mONAD (fsLit "MonadPlus") monadPlusClassKey
785 randomClassName = clsQual rANDOM (fsLit "Random") randomClassKey
786 randomGenClassName = clsQual rANDOM (fsLit "RandomGen") randomGenClassKey
787 isStringClassName = clsQual dATA_STRING (fsLit "IsString") isStringClassKey
790 objectTyConName :: Name
791 objectTyConName = tcQual dOTNET (fsLit "Object") objectTyConKey
792 -- objectTyConName was "wTcQual", but that's gone now, and
793 -- I can't see why it was wired in anyway...
794 unmarshalObjectName, marshalObjectName, marshalStringName,
795 unmarshalStringName, checkDotnetResName :: Name
796 unmarshalObjectName = varQual dOTNET (fsLit "unmarshalObject") unmarshalObjectIdKey
797 marshalObjectName = varQual dOTNET (fsLit "marshalObject") marshalObjectIdKey
798 marshalStringName = varQual dOTNET (fsLit "marshalString") marshalStringIdKey
799 unmarshalStringName = varQual dOTNET (fsLit "unmarshalString") unmarshalStringIdKey
800 checkDotnetResName = varQual dOTNET (fsLit "checkResult") checkDotnetResNameIdKey
803 %************************************************************************
805 \subsection{Local helpers}
807 %************************************************************************
809 All these are original names; hence mkOrig
812 varQual, tcQual, clsQual :: Module -> FastString -> Unique -> Name
813 varQual = mk_known_key_name varName
814 tcQual = mk_known_key_name tcName
815 clsQual = mk_known_key_name clsName
817 mk_known_key_name :: NameSpace -> Module -> FastString -> Unique -> Name
818 mk_known_key_name space modu str unique
819 = mkExternalName unique modu (mkOccNameFS space str) noSrcSpan
821 conName :: Module -> FastString -> Unique -> Name
822 conName modu occ unique
823 = mkExternalName unique modu (mkOccNameFS dataName occ) noSrcSpan
825 methName :: Module -> FastString -> Unique -> Name
826 methName modu occ unique
827 = mkExternalName unique modu (mkVarOccFS occ) noSrcSpan
830 %************************************************************************
832 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
834 %************************************************************************
835 --MetaHaskell extension hand allocate keys here
838 boundedClassKey, enumClassKey, eqClassKey, floatingClassKey,
839 fractionalClassKey, integralClassKey, monadClassKey, dataClassKey,
840 functorClassKey, numClassKey, ordClassKey, readClassKey, realClassKey,
841 realFloatClassKey, realFracClassKey, showClassKey, ixClassKey :: Unique
842 boundedClassKey = mkPreludeClassUnique 1
843 enumClassKey = mkPreludeClassUnique 2
844 eqClassKey = mkPreludeClassUnique 3
845 floatingClassKey = mkPreludeClassUnique 5
846 fractionalClassKey = mkPreludeClassUnique 6
847 integralClassKey = mkPreludeClassUnique 7
848 monadClassKey = mkPreludeClassUnique 8
849 dataClassKey = mkPreludeClassUnique 9
850 functorClassKey = mkPreludeClassUnique 10
851 numClassKey = mkPreludeClassUnique 11
852 ordClassKey = mkPreludeClassUnique 12
853 readClassKey = mkPreludeClassUnique 13
854 realClassKey = mkPreludeClassUnique 14
855 realFloatClassKey = mkPreludeClassUnique 15
856 realFracClassKey = mkPreludeClassUnique 16
857 showClassKey = mkPreludeClassUnique 17
858 ixClassKey = mkPreludeClassUnique 18
860 typeableClassKey, typeable1ClassKey, typeable2ClassKey, typeable3ClassKey,
861 typeable4ClassKey, typeable5ClassKey, typeable6ClassKey, typeable7ClassKey
863 typeableClassKey = mkPreludeClassUnique 20
864 typeable1ClassKey = mkPreludeClassUnique 21
865 typeable2ClassKey = mkPreludeClassUnique 22
866 typeable3ClassKey = mkPreludeClassUnique 23
867 typeable4ClassKey = mkPreludeClassUnique 24
868 typeable5ClassKey = mkPreludeClassUnique 25
869 typeable6ClassKey = mkPreludeClassUnique 26
870 typeable7ClassKey = mkPreludeClassUnique 27
872 monadFixClassKey :: Unique
873 monadFixClassKey = mkPreludeClassUnique 28
875 monadPlusClassKey, randomClassKey, randomGenClassKey :: Unique
876 monadPlusClassKey = mkPreludeClassUnique 30
877 randomClassKey = mkPreludeClassUnique 31
878 randomGenClassKey = mkPreludeClassUnique 32
880 isStringClassKey :: Unique
881 isStringClassKey = mkPreludeClassUnique 33
884 %************************************************************************
886 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
888 %************************************************************************
891 addrPrimTyConKey, arrayPrimTyConKey, boolTyConKey, byteArrayPrimTyConKey,
892 charPrimTyConKey, charTyConKey, doublePrimTyConKey, doubleTyConKey,
893 floatPrimTyConKey, floatTyConKey, funTyConKey, intPrimTyConKey,
894 intTyConKey, int8TyConKey, int16TyConKey, int32PrimTyConKey,
895 int32TyConKey, int64PrimTyConKey, int64TyConKey, integerTyConKey,
896 listTyConKey, foreignObjPrimTyConKey, weakPrimTyConKey,
897 mutableArrayPrimTyConKey, mutableByteArrayPrimTyConKey,
898 orderingTyConKey, mVarPrimTyConKey, ratioTyConKey, rationalTyConKey,
899 realWorldTyConKey, stablePtrPrimTyConKey, stablePtrTyConKey :: Unique
900 addrPrimTyConKey = mkPreludeTyConUnique 1
901 arrayPrimTyConKey = mkPreludeTyConUnique 3
902 boolTyConKey = mkPreludeTyConUnique 4
903 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
904 charPrimTyConKey = mkPreludeTyConUnique 7
905 charTyConKey = mkPreludeTyConUnique 8
906 doublePrimTyConKey = mkPreludeTyConUnique 9
907 doubleTyConKey = mkPreludeTyConUnique 10
908 floatPrimTyConKey = mkPreludeTyConUnique 11
909 floatTyConKey = mkPreludeTyConUnique 12
910 funTyConKey = mkPreludeTyConUnique 13
911 intPrimTyConKey = mkPreludeTyConUnique 14
912 intTyConKey = mkPreludeTyConUnique 15
913 int8TyConKey = mkPreludeTyConUnique 16
914 int16TyConKey = mkPreludeTyConUnique 17
915 int32PrimTyConKey = mkPreludeTyConUnique 18
916 int32TyConKey = mkPreludeTyConUnique 19
917 int64PrimTyConKey = mkPreludeTyConUnique 20
918 int64TyConKey = mkPreludeTyConUnique 21
919 integerTyConKey = mkPreludeTyConUnique 22
920 listTyConKey = mkPreludeTyConUnique 23
921 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
922 weakPrimTyConKey = mkPreludeTyConUnique 27
923 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
924 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
925 orderingTyConKey = mkPreludeTyConUnique 30
926 mVarPrimTyConKey = mkPreludeTyConUnique 31
927 ratioTyConKey = mkPreludeTyConUnique 32
928 rationalTyConKey = mkPreludeTyConUnique 33
929 realWorldTyConKey = mkPreludeTyConUnique 34
930 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
931 stablePtrTyConKey = mkPreludeTyConUnique 36
933 anyPrimTyConKey, anyPrimTyCon1Key :: Unique
934 anyPrimTyConKey = mkPreludeTyConUnique 37
935 anyPrimTyCon1Key = mkPreludeTyConUnique 38
937 statePrimTyConKey, stableNamePrimTyConKey, stableNameTyConKey,
938 mutVarPrimTyConKey, ioTyConKey,
939 wordPrimTyConKey, wordTyConKey, word8TyConKey, word16TyConKey,
940 word32PrimTyConKey, word32TyConKey, word64PrimTyConKey, word64TyConKey,
941 liftedConKey, unliftedConKey, anyBoxConKey, kindConKey, boxityConKey,
942 typeConKey, threadIdPrimTyConKey, bcoPrimTyConKey, ptrTyConKey,
943 funPtrTyConKey, tVarPrimTyConKey :: Unique
944 statePrimTyConKey = mkPreludeTyConUnique 50
945 stableNamePrimTyConKey = mkPreludeTyConUnique 51
946 stableNameTyConKey = mkPreludeTyConUnique 52
947 mutVarPrimTyConKey = mkPreludeTyConUnique 55
948 ioTyConKey = mkPreludeTyConUnique 56
949 wordPrimTyConKey = mkPreludeTyConUnique 58
950 wordTyConKey = mkPreludeTyConUnique 59
951 word8TyConKey = mkPreludeTyConUnique 60
952 word16TyConKey = mkPreludeTyConUnique 61
953 word32PrimTyConKey = mkPreludeTyConUnique 62
954 word32TyConKey = mkPreludeTyConUnique 63
955 word64PrimTyConKey = mkPreludeTyConUnique 64
956 word64TyConKey = mkPreludeTyConUnique 65
957 liftedConKey = mkPreludeTyConUnique 66
958 unliftedConKey = mkPreludeTyConUnique 67
959 anyBoxConKey = mkPreludeTyConUnique 68
960 kindConKey = mkPreludeTyConUnique 69
961 boxityConKey = mkPreludeTyConUnique 70
962 typeConKey = mkPreludeTyConUnique 71
963 threadIdPrimTyConKey = mkPreludeTyConUnique 72
964 bcoPrimTyConKey = mkPreludeTyConUnique 73
965 ptrTyConKey = mkPreludeTyConUnique 74
966 funPtrTyConKey = mkPreludeTyConUnique 75
967 tVarPrimTyConKey = mkPreludeTyConUnique 76
969 -- Generic Type Constructors
970 crossTyConKey, plusTyConKey, genUnitTyConKey :: Unique
971 crossTyConKey = mkPreludeTyConUnique 79
972 plusTyConKey = mkPreludeTyConUnique 80
973 genUnitTyConKey = mkPreludeTyConUnique 81
975 -- Parallel array type constructor
976 parrTyConKey :: Unique
977 parrTyConKey = mkPreludeTyConUnique 82
980 objectTyConKey :: Unique
981 objectTyConKey = mkPreludeTyConUnique 83
983 eitherTyConKey :: Unique
984 eitherTyConKey = mkPreludeTyConUnique 84
986 -- Super Kinds constructors
987 tySuperKindTyConKey, coSuperKindTyConKey :: Unique
988 tySuperKindTyConKey = mkPreludeTyConUnique 85
989 coSuperKindTyConKey = mkPreludeTyConUnique 86
992 liftedTypeKindTyConKey, openTypeKindTyConKey, unliftedTypeKindTyConKey,
993 ubxTupleKindTyConKey, argTypeKindTyConKey :: Unique
994 liftedTypeKindTyConKey = mkPreludeTyConUnique 87
995 openTypeKindTyConKey = mkPreludeTyConUnique 88
996 unliftedTypeKindTyConKey = mkPreludeTyConUnique 89
997 ubxTupleKindTyConKey = mkPreludeTyConUnique 90
998 argTypeKindTyConKey = mkPreludeTyConUnique 91
1000 -- Coercion constructors
1001 symCoercionTyConKey, transCoercionTyConKey, leftCoercionTyConKey,
1002 rightCoercionTyConKey, instCoercionTyConKey, unsafeCoercionTyConKey
1004 symCoercionTyConKey = mkPreludeTyConUnique 93
1005 transCoercionTyConKey = mkPreludeTyConUnique 94
1006 leftCoercionTyConKey = mkPreludeTyConUnique 95
1007 rightCoercionTyConKey = mkPreludeTyConUnique 96
1008 instCoercionTyConKey = mkPreludeTyConUnique 97
1009 unsafeCoercionTyConKey = mkPreludeTyConUnique 98
1011 unknownTyConKey, unknown1TyConKey, unknown2TyConKey, unknown3TyConKey,
1012 opaqueTyConKey :: Unique
1013 unknownTyConKey = mkPreludeTyConUnique 99
1014 unknown1TyConKey = mkPreludeTyConUnique 130
1015 unknown2TyConKey = mkPreludeTyConUnique 131
1016 unknown3TyConKey = mkPreludeTyConUnique 132
1017 opaqueTyConKey = mkPreludeTyConUnique 133
1019 stringTyConKey :: Unique
1020 stringTyConKey = mkPreludeTyConUnique 134
1022 ---------------- Template Haskell -------------------
1023 -- USES TyConUniques 100-129
1024 -----------------------------------------------------
1026 unitTyConKey :: Unique
1027 unitTyConKey = mkTupleTyConUnique Boxed 0
1030 %************************************************************************
1032 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1034 %************************************************************************
1037 charDataConKey, consDataConKey, doubleDataConKey, falseDataConKey,
1038 floatDataConKey, intDataConKey, nilDataConKey, ratioDataConKey,
1039 stableNameDataConKey, trueDataConKey, wordDataConKey,
1040 ioDataConKey :: Unique
1041 charDataConKey = mkPreludeDataConUnique 1
1042 consDataConKey = mkPreludeDataConUnique 2
1043 doubleDataConKey = mkPreludeDataConUnique 3
1044 falseDataConKey = mkPreludeDataConUnique 4
1045 floatDataConKey = mkPreludeDataConUnique 5
1046 intDataConKey = mkPreludeDataConUnique 6
1047 nilDataConKey = mkPreludeDataConUnique 11
1048 ratioDataConKey = mkPreludeDataConUnique 12
1049 stableNameDataConKey = mkPreludeDataConUnique 14
1050 trueDataConKey = mkPreludeDataConUnique 15
1051 wordDataConKey = mkPreludeDataConUnique 16
1052 ioDataConKey = mkPreludeDataConUnique 17
1054 -- Generic data constructors
1055 crossDataConKey, inlDataConKey, inrDataConKey, genUnitDataConKey :: Unique
1056 crossDataConKey = mkPreludeDataConUnique 20
1057 inlDataConKey = mkPreludeDataConUnique 21
1058 inrDataConKey = mkPreludeDataConUnique 22
1059 genUnitDataConKey = mkPreludeDataConUnique 23
1061 -- Data constructor for parallel arrays
1062 parrDataConKey :: Unique
1063 parrDataConKey = mkPreludeDataConUnique 24
1065 leftDataConKey, rightDataConKey :: Unique
1066 leftDataConKey = mkPreludeDataConUnique 25
1067 rightDataConKey = mkPreludeDataConUnique 26
1070 %************************************************************************
1072 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1074 %************************************************************************
1077 absentErrorIdKey, augmentIdKey, appendIdKey, buildIdKey, errorIdKey,
1078 foldlIdKey, foldrIdKey, recSelErrorIdKey,
1079 integerMinusOneIdKey, integerPlusOneIdKey,
1080 integerPlusTwoIdKey, integerZeroIdKey,
1081 int2IntegerIdKey, seqIdKey, irrefutPatErrorIdKey, eqStringIdKey,
1082 noMethodBindingErrorIdKey, nonExhaustiveGuardsErrorIdKey,
1083 runtimeErrorIdKey, parErrorIdKey, parIdKey, patErrorIdKey,
1084 realWorldPrimIdKey, recConErrorIdKey, recUpdErrorIdKey,
1086 unpackCStringUtf8IdKey, unpackCStringAppendIdKey,
1087 unpackCStringFoldrIdKey, unpackCStringIdKey :: Unique
1088 absentErrorIdKey = mkPreludeMiscIdUnique 1
1089 augmentIdKey = mkPreludeMiscIdUnique 3
1090 appendIdKey = mkPreludeMiscIdUnique 4
1091 buildIdKey = mkPreludeMiscIdUnique 5
1092 errorIdKey = mkPreludeMiscIdUnique 6
1093 foldlIdKey = mkPreludeMiscIdUnique 7
1094 foldrIdKey = mkPreludeMiscIdUnique 8
1095 recSelErrorIdKey = mkPreludeMiscIdUnique 9
1096 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
1097 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
1098 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
1099 integerZeroIdKey = mkPreludeMiscIdUnique 13
1100 int2IntegerIdKey = mkPreludeMiscIdUnique 14
1101 seqIdKey = mkPreludeMiscIdUnique 15
1102 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
1103 eqStringIdKey = mkPreludeMiscIdUnique 17
1104 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
1105 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1106 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
1107 parErrorIdKey = mkPreludeMiscIdUnique 21
1108 parIdKey = mkPreludeMiscIdUnique 22
1109 patErrorIdKey = mkPreludeMiscIdUnique 23
1110 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
1111 recConErrorIdKey = mkPreludeMiscIdUnique 25
1112 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
1113 traceIdKey = mkPreludeMiscIdUnique 27
1114 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
1115 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
1116 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
1117 unpackCStringIdKey = mkPreludeMiscIdUnique 31
1119 unsafeCoerceIdKey, concatIdKey, filterIdKey, zipIdKey, bindIOIdKey,
1120 returnIOIdKey, deRefStablePtrIdKey, newStablePtrIdKey,
1121 smallIntegerIdKey, plusIntegerIdKey, timesIntegerIdKey,
1122 printIdKey, failIOIdKey, nullAddrIdKey, voidArgIdKey,
1123 fstIdKey, sndIdKey, otherwiseIdKey, assertIdKey, runSTRepIdKey :: Unique
1124 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
1125 concatIdKey = mkPreludeMiscIdUnique 33
1126 filterIdKey = mkPreludeMiscIdUnique 34
1127 zipIdKey = mkPreludeMiscIdUnique 35
1128 bindIOIdKey = mkPreludeMiscIdUnique 36
1129 returnIOIdKey = mkPreludeMiscIdUnique 37
1130 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
1131 newStablePtrIdKey = mkPreludeMiscIdUnique 39
1132 smallIntegerIdKey = mkPreludeMiscIdUnique 40
1133 plusIntegerIdKey = mkPreludeMiscIdUnique 41
1134 timesIntegerIdKey = mkPreludeMiscIdUnique 42
1135 printIdKey = mkPreludeMiscIdUnique 43
1136 failIOIdKey = mkPreludeMiscIdUnique 44
1137 nullAddrIdKey = mkPreludeMiscIdUnique 46
1138 voidArgIdKey = mkPreludeMiscIdUnique 47
1139 fstIdKey = mkPreludeMiscIdUnique 49
1140 sndIdKey = mkPreludeMiscIdUnique 50
1141 otherwiseIdKey = mkPreludeMiscIdUnique 51
1142 assertIdKey = mkPreludeMiscIdUnique 53
1143 runSTRepIdKey = mkPreludeMiscIdUnique 54
1145 rootMainKey, runMainKey :: Unique
1146 rootMainKey = mkPreludeMiscIdUnique 55
1147 runMainKey = mkPreludeMiscIdUnique 56
1149 andIdKey, orIdKey, thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
1150 andIdKey = mkPreludeMiscIdUnique 57
1151 orIdKey = mkPreludeMiscIdUnique 58
1152 thenIOIdKey = mkPreludeMiscIdUnique 59
1153 lazyIdKey = mkPreludeMiscIdUnique 60
1154 assertErrorIdKey = mkPreludeMiscIdUnique 61
1156 breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
1157 breakpointJumpIdKey, breakpointCondJumpIdKey,
1158 breakpointAutoJumpIdKey :: Unique
1159 breakpointIdKey = mkPreludeMiscIdUnique 62
1160 breakpointCondIdKey = mkPreludeMiscIdUnique 63
1161 breakpointAutoIdKey = mkPreludeMiscIdUnique 64
1162 breakpointJumpIdKey = mkPreludeMiscIdUnique 65
1163 breakpointCondJumpIdKey = mkPreludeMiscIdUnique 66
1164 breakpointAutoJumpIdKey = mkPreludeMiscIdUnique 67
1166 inlineIdKey :: Unique
1167 inlineIdKey = mkPreludeMiscIdUnique 68
1169 mapIdKey, groupWithIdKey :: Unique
1170 mapIdKey = mkPreludeMiscIdUnique 69
1171 groupWithIdKey = mkPreludeMiscIdUnique 70
1173 -- Parallel array functions
1174 singletonPIdKey, nullPIdKey, lengthPIdKey, replicatePIdKey, mapPIdKey,
1175 filterPIdKey, zipPIdKey, crossMapPIdKey, indexPIdKey, toPIdKey,
1176 enumFromToPIdKey, enumFromThenToPIdKey,
1177 bpermutePIdKey, bpermuteDftPIdKey, indexOfPIdKey :: Unique
1178 singletonPIdKey = mkPreludeMiscIdUnique 79
1179 nullPIdKey = mkPreludeMiscIdUnique 80
1180 lengthPIdKey = mkPreludeMiscIdUnique 81
1181 replicatePIdKey = mkPreludeMiscIdUnique 82
1182 mapPIdKey = mkPreludeMiscIdUnique 83
1183 filterPIdKey = mkPreludeMiscIdUnique 84
1184 zipPIdKey = mkPreludeMiscIdUnique 85
1185 crossMapPIdKey = mkPreludeMiscIdUnique 86
1186 indexPIdKey = mkPreludeMiscIdUnique 87
1187 toPIdKey = mkPreludeMiscIdUnique 88
1188 enumFromToPIdKey = mkPreludeMiscIdUnique 89
1189 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
1190 bpermutePIdKey = mkPreludeMiscIdUnique 91
1191 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
1192 indexOfPIdKey = mkPreludeMiscIdUnique 93
1195 unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
1196 unmarshalStringIdKey, checkDotnetResNameIdKey :: Unique
1197 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
1198 marshalObjectIdKey = mkPreludeMiscIdUnique 95
1199 marshalStringIdKey = mkPreludeMiscIdUnique 96
1200 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
1201 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
1205 Certain class operations from Prelude classes. They get their own
1206 uniques so we can look them up easily when we want to conjure them up
1207 during type checking.
1210 -- Just a place holder for unbound variables produced by the renamer:
1211 unboundKey :: Unique
1212 unboundKey = mkPreludeMiscIdUnique 101
1214 fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
1215 enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
1216 enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
1217 failMClassOpKey, bindMClassOpKey, thenMClassOpKey, returnMClassOpKey
1219 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
1220 minusClassOpKey = mkPreludeMiscIdUnique 103
1221 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
1222 enumFromClassOpKey = mkPreludeMiscIdUnique 105
1223 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
1224 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
1225 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
1226 eqClassOpKey = mkPreludeMiscIdUnique 109
1227 geClassOpKey = mkPreludeMiscIdUnique 110
1228 negateClassOpKey = mkPreludeMiscIdUnique 111
1229 failMClassOpKey = mkPreludeMiscIdUnique 112
1230 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
1231 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
1232 returnMClassOpKey = mkPreludeMiscIdUnique 117
1234 -- Recursive do notation
1236 mfixIdKey = mkPreludeMiscIdUnique 118
1239 arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
1240 loopAIdKey :: Unique
1241 arrAIdKey = mkPreludeMiscIdUnique 119
1242 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
1243 firstAIdKey = mkPreludeMiscIdUnique 121
1244 appAIdKey = mkPreludeMiscIdUnique 122
1245 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
1246 loopAIdKey = mkPreludeMiscIdUnique 124
1248 fromStringClassOpKey :: Unique
1249 fromStringClassOpKey = mkPreludeMiscIdUnique 125
1251 ---------------- Template Haskell -------------------
1252 -- USES IdUniques 200-399
1253 -----------------------------------------------------
1257 %************************************************************************
1259 \subsection{Standard groups of types}
1261 %************************************************************************
1264 numericTyKeys :: [Unique]
1275 %************************************************************************
1277 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1279 %************************************************************************
1281 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1282 even though every numeric class has these two as a superclass,
1283 because the list of ambiguous dictionaries hasn't been simplified.
1286 numericClassKeys :: [Unique]
1292 ++ fractionalClassKeys
1294 fractionalClassKeys :: [Unique]
1295 fractionalClassKeys =
1296 [ fractionalClassKey
1302 -- the strictness analyser needs to know about numeric types
1303 -- (see SaAbsInt.lhs)
1304 needsDataDeclCtxtClassKeys :: [Unique]
1305 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1309 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1310 -- and are: "classes defined in the Prelude or a standard library"
1311 standardClassKeys :: [Unique]
1312 standardClassKeys = derivableClassKeys ++ numericClassKeys
1313 ++ [randomClassKey, randomGenClassKey,
1315 monadClassKey, monadPlusClassKey,
1320 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1324 derivableClassKeys :: [Unique]
1326 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1327 boundedClassKey, showClassKey, readClassKey ]