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, mkSystemVarName )
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.
101 The names for DPH can come from one of multiple backend packages. At the point where
102 'basicKnownKeyNames' is used, we don't know which backend it will be. Hence, we list
103 the names for multiple backends. That works out fine, although they use the same uniques,
104 as we are guaranteed to only load one backend; hence, only one of the different names
105 sharing a unique will be used.
108 basicKnownKeyNames :: [Name]
111 ++ typeableClassNames
112 ++ dphKnownKeyNames dphSeqPackageId ++ dphKnownKeyNames dphParPackageId
113 ++ [ -- Type constructors (synonyms especially)
114 ioTyConName, ioDataConName,
121 integerTyConName, smallIntegerName,
123 -- Classes. *Must* include:
124 -- classes that are grabbed by key (e.g., eqClassKey)
125 -- classes in "Class.standardClassKeys" (quite a few)
126 eqClassName, -- mentioned, derivable
127 ordClassName, -- derivable
128 boundedClassName, -- derivable
129 numClassName, -- mentioned, numeric
130 enumClassName, -- derivable
133 realClassName, -- numeric
134 integralClassName, -- numeric
135 fractionalClassName, -- numeric
136 floatingClassName, -- numeric
137 realFracClassName, -- numeric
138 realFloatClassName, -- numeric
141 applicativeClassName,
143 traversableClassName,
146 negateName, minusName, geName, eqName,
148 -- Conversion functions
149 fromRationalName, fromIntegerName,
150 toIntegerName, toRationalName,
151 fromIntegralName, realToFracName,
157 enumFromName, enumFromThenName,
158 enumFromThenToName, enumFromToName,
161 thenIOName, bindIOName, returnIOName, failIOName,
162 failMName, bindMName, thenMName, returnMName,
168 arrAName, composeAName, firstAName,
169 appAName, choiceAName, loopAName,
187 unpackCStringName, unpackCStringAppendName,
188 unpackCStringFoldrName, unpackCStringUtf8Name,
191 concatName, filterName, mapName,
192 zipName, foldrName, buildName, augmentName, appendName,
194 dollarName, -- The ($) apply function
196 -- FFI primitive types that are not wired-in.
197 stablePtrTyConName, ptrTyConName, funPtrTyConName,
198 int8TyConName, int16TyConName, int32TyConName, int64TyConName,
199 wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
202 otherwiseIdName, inlineIdName,
203 plusIntegerName, timesIntegerName,
204 eqStringName, assertName, breakpointName, breakpointCondName,
205 breakpointAutoName, opaqueTyConName,
206 assertErrorName, runSTRepName,
207 printName, fstName, sndName,
210 monadFixClassName, mfixName,
213 randomClassName, randomGenClassName, monadPlusClassName,
215 -- Annotation type checking
216 toAnnotationWrapperName
219 , eitherTyConName, leftDataConName, rightDataConName
222 , objectTyConName, marshalObjectName, unmarshalObjectName
223 , marshalStringName, unmarshalStringName, checkDotnetResName
225 -- Monad comprehensions
232 genericTyConNames :: [Name]
233 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
235 -- Know names from the DPH package which vary depending on the selected DPH backend.
237 dphKnownKeyNames :: PackageId -> [Name]
238 dphKnownKeyNames dphPkg
241 -- Parallel array operations
242 nullPName, lengthPName, replicatePName, singletonPName, mapPName,
243 filterPName, zipPName, crossMapPName, indexPName,
244 toPName, emptyPName, appPName,
245 enumFromToPName, enumFromThenToPName
251 %************************************************************************
253 \subsection{Module names}
255 %************************************************************************
258 --MetaHaskell Extension Add a new module here
261 pRELUDE = mkBaseModule_ pRELUDE_NAME
263 gHC_PRIM, gHC_TYPES, gHC_UNIT, gHC_ORDERING, gHC_GENERICS,
265 gHC_CLASSES, gHC_BASE, gHC_ENUM,
266 gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_INTEGER_TYPE, gHC_LIST,
267 gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING, dATA_FOLDABLE, dATA_TRAVERSABLE,
268 gHC_PACK, gHC_CONC, gHC_IO, gHC_IO_Exception,
269 gHC_ST, gHC_ARR, gHC_STABLE, gHC_ADDR, gHC_PTR, gHC_ERR, gHC_REAL,
270 gHC_FLOAT, gHC_TOP_HANDLER, sYSTEM_IO, dYNAMIC, tYPEABLE, gENERICS,
271 dOTNET, rEAD_PREC, lEX, gHC_INT, gHC_WORD, mONAD, mONAD_FIX, mONAD_GROUP, mONAD_ZIP,
272 aRROW, cONTROL_APPLICATIVE, gHC_DESUGAR, rANDOM, gHC_EXTS,
273 cONTROL_EXCEPTION_BASE :: Module
275 gHC_PRIM = mkPrimModule (fsLit "GHC.Prim") -- Primitive types and values
276 gHC_TYPES = mkPrimModule (fsLit "GHC.Types")
277 gHC_UNIT = mkPrimModule (fsLit "GHC.Unit")
278 gHC_ORDERING = mkPrimModule (fsLit "GHC.Ordering")
279 gHC_GENERICS = mkPrimModule (fsLit "GHC.Generics")
280 gHC_MAGIC = mkPrimModule (fsLit "GHC.Magic")
282 gHC_CLASSES = mkBaseModule (fsLit "GHC.Classes")
283 gHC_BASE = mkBaseModule (fsLit "GHC.Base")
284 gHC_ENUM = mkBaseModule (fsLit "GHC.Enum")
285 gHC_SHOW = mkBaseModule (fsLit "GHC.Show")
286 gHC_READ = mkBaseModule (fsLit "GHC.Read")
287 gHC_NUM = mkBaseModule (fsLit "GHC.Num")
288 gHC_INTEGER = mkIntegerModule (fsLit "GHC.Integer")
289 gHC_INTEGER_TYPE= mkIntegerModule (fsLit "GHC.Integer.Type")
290 gHC_LIST = mkBaseModule (fsLit "GHC.List")
291 gHC_TUPLE = mkPrimModule (fsLit "GHC.Tuple")
292 dATA_TUPLE = mkBaseModule (fsLit "Data.Tuple")
293 dATA_EITHER = mkBaseModule (fsLit "Data.Either")
294 dATA_STRING = mkBaseModule (fsLit "Data.String")
295 dATA_FOLDABLE = mkBaseModule (fsLit "Data.Foldable")
296 dATA_TRAVERSABLE= mkBaseModule (fsLit "Data.Traversable")
297 gHC_PACK = mkBaseModule (fsLit "GHC.Pack")
298 gHC_CONC = mkBaseModule (fsLit "GHC.Conc")
299 gHC_IO = mkBaseModule (fsLit "GHC.IO")
300 gHC_IO_Exception = mkBaseModule (fsLit "GHC.IO.Exception")
301 gHC_ST = mkBaseModule (fsLit "GHC.ST")
302 gHC_ARR = mkBaseModule (fsLit "GHC.Arr")
303 gHC_STABLE = mkBaseModule (fsLit "GHC.Stable")
304 gHC_ADDR = mkBaseModule (fsLit "GHC.Addr")
305 gHC_PTR = mkBaseModule (fsLit "GHC.Ptr")
306 gHC_ERR = mkBaseModule (fsLit "GHC.Err")
307 gHC_REAL = mkBaseModule (fsLit "GHC.Real")
308 gHC_FLOAT = mkBaseModule (fsLit "GHC.Float")
309 gHC_TOP_HANDLER = mkBaseModule (fsLit "GHC.TopHandler")
310 sYSTEM_IO = mkBaseModule (fsLit "System.IO")
311 dYNAMIC = mkBaseModule (fsLit "Data.Dynamic")
312 tYPEABLE = mkBaseModule (fsLit "Data.Typeable")
313 gENERICS = mkBaseModule (fsLit "Data.Data")
314 dOTNET = mkBaseModule (fsLit "GHC.Dotnet")
315 rEAD_PREC = mkBaseModule (fsLit "Text.ParserCombinators.ReadPrec")
316 lEX = mkBaseModule (fsLit "Text.Read.Lex")
317 gHC_INT = mkBaseModule (fsLit "GHC.Int")
318 gHC_WORD = mkBaseModule (fsLit "GHC.Word")
319 mONAD = mkBaseModule (fsLit "Control.Monad")
320 mONAD_FIX = mkBaseModule (fsLit "Control.Monad.Fix")
321 mONAD_GROUP = mkBaseModule (fsLit "Control.Monad.Group")
322 mONAD_ZIP = mkBaseModule (fsLit "Control.Monad.Zip")
323 aRROW = mkBaseModule (fsLit "Control.Arrow")
324 cONTROL_APPLICATIVE = mkBaseModule (fsLit "Control.Applicative")
325 gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
326 rANDOM = mkBaseModule (fsLit "System.Random")
327 gHC_EXTS = mkBaseModule (fsLit "GHC.Exts")
328 cONTROL_EXCEPTION_BASE = mkBaseModule (fsLit "Control.Exception.Base")
330 gHC_PARR :: PackageId -> Module
331 gHC_PARR pkg = mkModule pkg (mkModuleNameFS (fsLit "Data.Array.Parallel"))
334 gHC_PARR' = mkBaseModule (fsLit "GHC.PArr")
336 mAIN, rOOT_MAIN :: Module
337 mAIN = mkMainModule_ mAIN_NAME
338 rOOT_MAIN = mkMainModule (fsLit ":Main") -- Root module for initialisation
340 -- The ':xxx' makes a module name that the user can never
341 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
342 -- module name still starts with a capital letter, which keeps
343 -- the z-encoded version consistent.
344 iNTERACTIVE :: Module
345 iNTERACTIVE = mkMainModule (fsLit ":Interactive")
347 pRELUDE_NAME, mAIN_NAME :: ModuleName
348 pRELUDE_NAME = mkModuleNameFS (fsLit "Prelude")
349 mAIN_NAME = mkModuleNameFS (fsLit "Main")
351 mkPrimModule :: FastString -> Module
352 mkPrimModule m = mkModule primPackageId (mkModuleNameFS m)
354 mkIntegerModule :: FastString -> Module
355 mkIntegerModule m = mkModule integerPackageId (mkModuleNameFS m)
357 mkBaseModule :: FastString -> Module
358 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
360 mkBaseModule_ :: ModuleName -> Module
361 mkBaseModule_ m = mkModule basePackageId m
363 mkMainModule :: FastString -> Module
364 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
366 mkMainModule_ :: ModuleName -> Module
367 mkMainModule_ m = mkModule mainPackageId m
370 %************************************************************************
372 \subsection{Constructing the names of tuples
374 %************************************************************************
377 mkTupleModule :: Boxity -> Arity -> Module
378 mkTupleModule Boxed 0 = gHC_UNIT
379 mkTupleModule Boxed _ = gHC_TUPLE
380 mkTupleModule Unboxed _ = gHC_PRIM
384 %************************************************************************
388 %************************************************************************
391 main_RDR_Unqual :: RdrName
392 main_RDR_Unqual = mkUnqual varName (fsLit "main")
393 -- We definitely don't want an Orig RdrName, because
394 -- main might, in principle, be imported into module Main
396 forall_tv_RDR, dot_tv_RDR :: RdrName
397 forall_tv_RDR = mkUnqual tvName (fsLit "forall")
398 dot_tv_RDR = mkUnqual tvName (fsLit ".")
400 eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
401 ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
402 eq_RDR = nameRdrName eqName
403 ge_RDR = nameRdrName geName
404 ne_RDR = varQual_RDR gHC_CLASSES (fsLit "/=")
405 le_RDR = varQual_RDR gHC_CLASSES (fsLit "<=")
406 lt_RDR = varQual_RDR gHC_CLASSES (fsLit "<")
407 gt_RDR = varQual_RDR gHC_CLASSES (fsLit ">")
408 compare_RDR = varQual_RDR gHC_CLASSES (fsLit "compare")
409 ltTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "LT")
410 eqTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "EQ")
411 gtTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "GT")
413 eqClass_RDR, numClass_RDR, ordClass_RDR, enumClass_RDR, monadClass_RDR
415 eqClass_RDR = nameRdrName eqClassName
416 numClass_RDR = nameRdrName numClassName
417 ordClass_RDR = nameRdrName ordClassName
418 enumClass_RDR = nameRdrName enumClassName
419 monadClass_RDR = nameRdrName monadClassName
421 map_RDR, append_RDR :: RdrName
422 map_RDR = varQual_RDR gHC_BASE (fsLit "map")
423 append_RDR = varQual_RDR gHC_BASE (fsLit "++")
425 foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR :: RdrName
426 foldr_RDR = nameRdrName foldrName
427 build_RDR = nameRdrName buildName
428 returnM_RDR = nameRdrName returnMName
429 bindM_RDR = nameRdrName bindMName
430 failM_RDR = nameRdrName failMName
432 left_RDR, right_RDR :: RdrName
433 left_RDR = nameRdrName leftDataConName
434 right_RDR = nameRdrName rightDataConName
436 fromEnum_RDR, toEnum_RDR :: RdrName
437 fromEnum_RDR = varQual_RDR gHC_ENUM (fsLit "fromEnum")
438 toEnum_RDR = varQual_RDR gHC_ENUM (fsLit "toEnum")
440 enumFrom_RDR, enumFromTo_RDR, enumFromThen_RDR, enumFromThenTo_RDR :: RdrName
441 enumFrom_RDR = nameRdrName enumFromName
442 enumFromTo_RDR = nameRdrName enumFromToName
443 enumFromThen_RDR = nameRdrName enumFromThenName
444 enumFromThenTo_RDR = nameRdrName enumFromThenToName
446 ratioDataCon_RDR, plusInteger_RDR, timesInteger_RDR :: RdrName
447 ratioDataCon_RDR = nameRdrName ratioDataConName
448 plusInteger_RDR = nameRdrName plusIntegerName
449 timesInteger_RDR = nameRdrName timesIntegerName
451 ioDataCon_RDR :: RdrName
452 ioDataCon_RDR = nameRdrName ioDataConName
454 eqString_RDR, unpackCString_RDR, unpackCStringFoldr_RDR,
455 unpackCStringUtf8_RDR :: RdrName
456 eqString_RDR = nameRdrName eqStringName
457 unpackCString_RDR = nameRdrName unpackCStringName
458 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
459 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
461 newStablePtr_RDR, wordDataCon_RDR :: RdrName
462 newStablePtr_RDR = nameRdrName newStablePtrName
463 wordDataCon_RDR = dataQual_RDR gHC_WORD (fsLit "W#")
465 bindIO_RDR, returnIO_RDR :: RdrName
466 bindIO_RDR = nameRdrName bindIOName
467 returnIO_RDR = nameRdrName returnIOName
469 fromInteger_RDR, fromRational_RDR, minus_RDR, times_RDR, plus_RDR :: RdrName
470 fromInteger_RDR = nameRdrName fromIntegerName
471 fromRational_RDR = nameRdrName fromRationalName
472 minus_RDR = nameRdrName minusName
473 times_RDR = varQual_RDR gHC_NUM (fsLit "*")
474 plus_RDR = varQual_RDR gHC_NUM (fsLit "+")
476 fromString_RDR :: RdrName
477 fromString_RDR = nameRdrName fromStringName
479 compose_RDR :: RdrName
480 compose_RDR = varQual_RDR gHC_BASE (fsLit ".")
482 not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
483 and_RDR, range_RDR, inRange_RDR, index_RDR,
484 unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
485 and_RDR = varQual_RDR gHC_CLASSES (fsLit "&&")
486 not_RDR = varQual_RDR gHC_CLASSES (fsLit "not")
487 getTag_RDR = varQual_RDR gHC_BASE (fsLit "getTag")
488 succ_RDR = varQual_RDR gHC_ENUM (fsLit "succ")
489 pred_RDR = varQual_RDR gHC_ENUM (fsLit "pred")
490 minBound_RDR = varQual_RDR gHC_ENUM (fsLit "minBound")
491 maxBound_RDR = varQual_RDR gHC_ENUM (fsLit "maxBound")
492 range_RDR = varQual_RDR gHC_ARR (fsLit "range")
493 inRange_RDR = varQual_RDR gHC_ARR (fsLit "inRange")
494 index_RDR = varQual_RDR gHC_ARR (fsLit "index")
495 unsafeIndex_RDR = varQual_RDR gHC_ARR (fsLit "unsafeIndex")
496 unsafeRangeSize_RDR = varQual_RDR gHC_ARR (fsLit "unsafeRangeSize")
498 readList_RDR, readListDefault_RDR, readListPrec_RDR, readListPrecDefault_RDR,
499 readPrec_RDR, parens_RDR, choose_RDR, lexP_RDR :: RdrName
500 readList_RDR = varQual_RDR gHC_READ (fsLit "readList")
501 readListDefault_RDR = varQual_RDR gHC_READ (fsLit "readListDefault")
502 readListPrec_RDR = varQual_RDR gHC_READ (fsLit "readListPrec")
503 readListPrecDefault_RDR = varQual_RDR gHC_READ (fsLit "readListPrecDefault")
504 readPrec_RDR = varQual_RDR gHC_READ (fsLit "readPrec")
505 parens_RDR = varQual_RDR gHC_READ (fsLit "parens")
506 choose_RDR = varQual_RDR gHC_READ (fsLit "choose")
507 lexP_RDR = varQual_RDR gHC_READ (fsLit "lexP")
509 punc_RDR, ident_RDR, symbol_RDR :: RdrName
510 punc_RDR = dataQual_RDR lEX (fsLit "Punc")
511 ident_RDR = dataQual_RDR lEX (fsLit "Ident")
512 symbol_RDR = dataQual_RDR lEX (fsLit "Symbol")
514 step_RDR, alt_RDR, reset_RDR, prec_RDR :: RdrName
515 step_RDR = varQual_RDR rEAD_PREC (fsLit "step")
516 alt_RDR = varQual_RDR rEAD_PREC (fsLit "+++")
517 reset_RDR = varQual_RDR rEAD_PREC (fsLit "reset")
518 prec_RDR = varQual_RDR rEAD_PREC (fsLit "prec")
520 showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR,
521 showSpace_RDR, showParen_RDR :: RdrName
522 showList_RDR = varQual_RDR gHC_SHOW (fsLit "showList")
523 showList___RDR = varQual_RDR gHC_SHOW (fsLit "showList__")
524 showsPrec_RDR = varQual_RDR gHC_SHOW (fsLit "showsPrec")
525 showString_RDR = varQual_RDR gHC_SHOW (fsLit "showString")
526 showSpace_RDR = varQual_RDR gHC_SHOW (fsLit "showSpace")
527 showParen_RDR = varQual_RDR gHC_SHOW (fsLit "showParen")
529 typeOf_RDR, mkTypeRep_RDR, mkTyConRep_RDR :: RdrName
530 typeOf_RDR = varQual_RDR tYPEABLE (fsLit "typeOf")
531 mkTypeRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyConApp")
532 mkTyConRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyCon")
534 undefined_RDR :: RdrName
535 undefined_RDR = varQual_RDR gHC_ERR (fsLit "undefined")
537 crossDataCon_RDR, inlDataCon_RDR, inrDataCon_RDR, genUnitDataCon_RDR :: RdrName
538 crossDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit ":*:")
539 inlDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inl")
540 inrDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inr")
541 genUnitDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Unit")
543 fmap_RDR, pure_RDR, ap_RDR, foldable_foldr_RDR, traverse_RDR :: RdrName
544 fmap_RDR = varQual_RDR gHC_BASE (fsLit "fmap")
545 pure_RDR = varQual_RDR cONTROL_APPLICATIVE (fsLit "pure")
546 ap_RDR = varQual_RDR cONTROL_APPLICATIVE (fsLit "<*>")
547 foldable_foldr_RDR = varQual_RDR dATA_FOLDABLE (fsLit "foldr")
548 traverse_RDR = varQual_RDR dATA_TRAVERSABLE (fsLit "traverse")
550 ----------------------
551 varQual_RDR, tcQual_RDR, clsQual_RDR, dataQual_RDR
552 :: Module -> FastString -> RdrName
553 varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str)
554 tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str)
555 clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str)
556 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
559 %************************************************************************
561 \subsection{Known-key names}
563 %************************************************************************
565 Many of these Names are not really "built in", but some parts of the
566 compiler (notably the deriving mechanism) need to mention their names,
567 and it's convenient to write them all down in one place.
569 --MetaHaskell Extension add the constrs and the lower case case
570 -- guys as well (perhaps) e.g. see trueDataConName below
575 wildCardName = mkSystemVarName wildCardKey (fsLit "wild")
577 runMainIOName :: Name
578 runMainIOName = varQual gHC_TOP_HANDLER (fsLit "runMainIO") runMainKey
580 orderingTyConName :: Name
581 orderingTyConName = tcQual gHC_ORDERING (fsLit "Ordering") orderingTyConKey
583 eitherTyConName, leftDataConName, rightDataConName :: Name
584 eitherTyConName = tcQual dATA_EITHER (fsLit "Either") eitherTyConKey
585 leftDataConName = conName dATA_EITHER (fsLit "Left") leftDataConKey
586 rightDataConName = conName dATA_EITHER (fsLit "Right") rightDataConKey
589 crossTyConName, plusTyConName, genUnitTyConName :: Name
590 crossTyConName = tcQual gHC_GENERICS (fsLit ":*:") crossTyConKey
591 plusTyConName = tcQual gHC_GENERICS (fsLit ":+:") plusTyConKey
592 genUnitTyConName = tcQual gHC_GENERICS (fsLit "Unit") genUnitTyConKey
594 -- Base strings Strings
595 unpackCStringName, unpackCStringAppendName, unpackCStringFoldrName,
596 unpackCStringUtf8Name, eqStringName, stringTyConName :: Name
597 unpackCStringName = varQual gHC_BASE (fsLit "unpackCString#") unpackCStringIdKey
598 unpackCStringAppendName = varQual gHC_BASE (fsLit "unpackAppendCString#") unpackCStringAppendIdKey
599 unpackCStringFoldrName = varQual gHC_BASE (fsLit "unpackFoldrCString#") unpackCStringFoldrIdKey
600 unpackCStringUtf8Name = varQual gHC_BASE (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
601 eqStringName = varQual gHC_BASE (fsLit "eqString") eqStringIdKey
602 stringTyConName = tcQual gHC_BASE (fsLit "String") stringTyConKey
604 -- The 'inline' function
606 inlineIdName = varQual gHC_MAGIC (fsLit "inline") inlineIdKey
608 -- Base classes (Eq, Ord, Functor)
609 eqClassName, eqName, ordClassName, geName, functorClassName :: Name
610 eqClassName = clsQual gHC_CLASSES (fsLit "Eq") eqClassKey
611 eqName = methName gHC_CLASSES (fsLit "==") eqClassOpKey
612 ordClassName = clsQual gHC_CLASSES (fsLit "Ord") ordClassKey
613 geName = methName gHC_CLASSES (fsLit ">=") geClassOpKey
614 functorClassName = clsQual gHC_BASE (fsLit "Functor") functorClassKey
617 monadClassName, thenMName, bindMName, returnMName, failMName :: Name
618 monadClassName = clsQual gHC_BASE (fsLit "Monad") monadClassKey
619 thenMName = methName gHC_BASE (fsLit ">>") thenMClassOpKey
620 bindMName = methName gHC_BASE (fsLit ">>=") bindMClassOpKey
621 returnMName = methName gHC_BASE (fsLit "return") returnMClassOpKey
622 failMName = methName gHC_BASE (fsLit "fail") failMClassOpKey
624 -- Classes (Applicative, Foldable, Traversable)
625 applicativeClassName, foldableClassName, traversableClassName :: Name
626 applicativeClassName = clsQual cONTROL_APPLICATIVE (fsLit "Applicative") applicativeClassKey
627 foldableClassName = clsQual dATA_FOLDABLE (fsLit "Foldable") foldableClassKey
628 traversableClassName = clsQual dATA_TRAVERSABLE (fsLit "Traversable") traversableClassKey
630 -- Functions for GHC extensions
631 groupWithName :: Name
632 groupWithName = varQual gHC_EXTS (fsLit "groupWith") groupWithIdKey
634 -- Random PrelBase functions
635 fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
636 mapName, appendName, assertName,
637 breakpointName, breakpointCondName, breakpointAutoName,
638 dollarName, opaqueTyConName :: Name
639 fromStringName = methName dATA_STRING (fsLit "fromString") fromStringClassOpKey
640 otherwiseIdName = varQual gHC_BASE (fsLit "otherwise") otherwiseIdKey
641 foldrName = varQual gHC_BASE (fsLit "foldr") foldrIdKey
642 buildName = varQual gHC_BASE (fsLit "build") buildIdKey
643 augmentName = varQual gHC_BASE (fsLit "augment") augmentIdKey
644 mapName = varQual gHC_BASE (fsLit "map") mapIdKey
645 appendName = varQual gHC_BASE (fsLit "++") appendIdKey
646 dollarName = varQual gHC_BASE (fsLit "$") dollarIdKey
647 assertName = varQual gHC_BASE (fsLit "assert") assertIdKey
648 breakpointName = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
649 breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
650 breakpointAutoName= varQual gHC_BASE (fsLit "breakpointAuto") breakpointAutoIdKey
651 opaqueTyConName = tcQual gHC_BASE (fsLit "Opaque") opaqueTyConKey
653 breakpointJumpName :: Name
657 (mkOccNameFS varName (fsLit "breakpointJump"))
659 breakpointCondJumpName :: Name
660 breakpointCondJumpName
662 breakpointCondJumpIdKey
663 (mkOccNameFS varName (fsLit "breakpointCondJump"))
665 breakpointAutoJumpName :: Name
666 breakpointAutoJumpName
668 breakpointAutoJumpIdKey
669 (mkOccNameFS varName (fsLit "breakpointAutoJump"))
673 fstName, sndName :: Name
674 fstName = varQual dATA_TUPLE (fsLit "fst") fstIdKey
675 sndName = varQual dATA_TUPLE (fsLit "snd") sndIdKey
678 numClassName, fromIntegerName, minusName, negateName, plusIntegerName,
680 integerTyConName, smallIntegerName :: Name
681 numClassName = clsQual gHC_NUM (fsLit "Num") numClassKey
682 fromIntegerName = methName gHC_NUM (fsLit "fromInteger") fromIntegerClassOpKey
683 minusName = methName gHC_NUM (fsLit "-") minusClassOpKey
684 negateName = methName gHC_NUM (fsLit "negate") negateClassOpKey
685 plusIntegerName = varQual gHC_INTEGER (fsLit "plusInteger") plusIntegerIdKey
686 timesIntegerName = varQual gHC_INTEGER (fsLit "timesInteger") timesIntegerIdKey
687 integerTyConName = tcQual gHC_INTEGER_TYPE (fsLit "Integer") integerTyConKey
688 smallIntegerName = varQual gHC_INTEGER (fsLit "smallInteger") smallIntegerIdKey
690 -- GHC.Real types and classes
691 rationalTyConName, ratioTyConName, ratioDataConName, realClassName,
692 integralClassName, realFracClassName, fractionalClassName,
693 fromRationalName, toIntegerName, toRationalName, fromIntegralName,
694 realToFracName :: Name
695 rationalTyConName = tcQual gHC_REAL (fsLit "Rational") rationalTyConKey
696 ratioTyConName = tcQual gHC_REAL (fsLit "Ratio") ratioTyConKey
697 ratioDataConName = conName gHC_REAL (fsLit ":%") ratioDataConKey
698 realClassName = clsQual gHC_REAL (fsLit "Real") realClassKey
699 integralClassName = clsQual gHC_REAL (fsLit "Integral") integralClassKey
700 realFracClassName = clsQual gHC_REAL (fsLit "RealFrac") realFracClassKey
701 fractionalClassName = clsQual gHC_REAL (fsLit "Fractional") fractionalClassKey
702 fromRationalName = methName gHC_REAL (fsLit "fromRational") fromRationalClassOpKey
703 toIntegerName = methName gHC_REAL (fsLit "toInteger") toIntegerClassOpKey
704 toRationalName = methName gHC_REAL (fsLit "toRational") toRationalClassOpKey
705 fromIntegralName = varQual gHC_REAL (fsLit "fromIntegral") fromIntegralIdKey
706 realToFracName = varQual gHC_REAL (fsLit "realToFrac") realToFracIdKey
709 floatingClassName, realFloatClassName :: Name
710 floatingClassName = clsQual gHC_FLOAT (fsLit "Floating") floatingClassKey
711 realFloatClassName = clsQual gHC_FLOAT (fsLit "RealFloat") realFloatClassKey
715 ixClassName = clsQual gHC_ARR (fsLit "Ix") ixClassKey
718 typeableClassName, typeable1ClassName, typeable2ClassName,
719 typeable3ClassName, typeable4ClassName, typeable5ClassName,
720 typeable6ClassName, typeable7ClassName :: Name
721 typeableClassName = clsQual tYPEABLE (fsLit "Typeable") typeableClassKey
722 typeable1ClassName = clsQual tYPEABLE (fsLit "Typeable1") typeable1ClassKey
723 typeable2ClassName = clsQual tYPEABLE (fsLit "Typeable2") typeable2ClassKey
724 typeable3ClassName = clsQual tYPEABLE (fsLit "Typeable3") typeable3ClassKey
725 typeable4ClassName = clsQual tYPEABLE (fsLit "Typeable4") typeable4ClassKey
726 typeable5ClassName = clsQual tYPEABLE (fsLit "Typeable5") typeable5ClassKey
727 typeable6ClassName = clsQual tYPEABLE (fsLit "Typeable6") typeable6ClassKey
728 typeable7ClassName = clsQual tYPEABLE (fsLit "Typeable7") typeable7ClassKey
730 typeableClassNames :: [Name]
731 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
732 , typeable3ClassName, typeable4ClassName, typeable5ClassName
733 , typeable6ClassName, typeable7ClassName ]
736 dataClassName :: Name
737 dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
740 assertErrorName :: Name
741 assertErrorName = varQual gHC_IO_Exception (fsLit "assertError") assertErrorIdKey
743 -- Enum module (Enum, Bounded)
744 enumClassName, enumFromName, enumFromToName, enumFromThenName,
745 enumFromThenToName, boundedClassName :: Name
746 enumClassName = clsQual gHC_ENUM (fsLit "Enum") enumClassKey
747 enumFromName = methName gHC_ENUM (fsLit "enumFrom") enumFromClassOpKey
748 enumFromToName = methName gHC_ENUM (fsLit "enumFromTo") enumFromToClassOpKey
749 enumFromThenName = methName gHC_ENUM (fsLit "enumFromThen") enumFromThenClassOpKey
750 enumFromThenToName = methName gHC_ENUM (fsLit "enumFromThenTo") enumFromThenToClassOpKey
751 boundedClassName = clsQual gHC_ENUM (fsLit "Bounded") boundedClassKey
754 concatName, filterName, zipName :: Name
755 concatName = varQual gHC_LIST (fsLit "concat") concatIdKey
756 filterName = varQual gHC_LIST (fsLit "filter") filterIdKey
757 zipName = varQual gHC_LIST (fsLit "zip") zipIdKey
760 showClassName :: Name
761 showClassName = clsQual gHC_SHOW (fsLit "Show") showClassKey
764 readClassName :: Name
765 readClassName = clsQual gHC_READ (fsLit "Read") readClassKey
767 -- parallel array types and functions
768 enumFromToPName, enumFromThenToPName, nullPName, lengthPName,
769 singletonPName, replicatePName, mapPName, filterPName,
770 zipPName, crossMapPName, indexPName, toPName,
771 emptyPName, appPName :: PackageId -> Name
772 enumFromToPName pkg = varQual (gHC_PARR pkg) (fsLit "enumFromToP") enumFromToPIdKey
773 enumFromThenToPName pkg = varQual (gHC_PARR pkg) (fsLit "enumFromThenToP") enumFromThenToPIdKey
774 nullPName pkg = varQual (gHC_PARR pkg) (fsLit "nullP") nullPIdKey
775 lengthPName pkg = varQual (gHC_PARR pkg) (fsLit "lengthP") lengthPIdKey
776 singletonPName pkg = varQual (gHC_PARR pkg) (fsLit "singletonP") singletonPIdKey
777 replicatePName pkg = varQual (gHC_PARR pkg) (fsLit "replicateP") replicatePIdKey
778 mapPName pkg = varQual (gHC_PARR pkg) (fsLit "mapP") mapPIdKey
779 filterPName pkg = varQual (gHC_PARR pkg) (fsLit "filterP") filterPIdKey
780 zipPName pkg = varQual (gHC_PARR pkg) (fsLit "zipP") zipPIdKey
781 crossMapPName pkg = varQual (gHC_PARR pkg) (fsLit "crossMapP") crossMapPIdKey
782 indexPName pkg = varQual (gHC_PARR pkg) (fsLit "!:") indexPIdKey
783 toPName pkg = varQual (gHC_PARR pkg) (fsLit "toP") toPIdKey
784 emptyPName pkg = varQual (gHC_PARR pkg) (fsLit "emptyP") emptyPIdKey
785 appPName pkg = varQual (gHC_PARR pkg) (fsLit "+:+") appPIdKey
788 ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
790 ioTyConName = tcQual gHC_TYPES (fsLit "IO") ioTyConKey
791 ioDataConName = conName gHC_TYPES (fsLit "IO") ioDataConKey
792 thenIOName = varQual gHC_BASE (fsLit "thenIO") thenIOIdKey
793 bindIOName = varQual gHC_BASE (fsLit "bindIO") bindIOIdKey
794 returnIOName = varQual gHC_BASE (fsLit "returnIO") returnIOIdKey
795 failIOName = varQual gHC_IO (fsLit "failIO") failIOIdKey
799 printName = varQual sYSTEM_IO (fsLit "print") printIdKey
801 -- Int, Word, and Addr things
802 int8TyConName, int16TyConName, int32TyConName, int64TyConName :: Name
803 int8TyConName = tcQual gHC_INT (fsLit "Int8") int8TyConKey
804 int16TyConName = tcQual gHC_INT (fsLit "Int16") int16TyConKey
805 int32TyConName = tcQual gHC_INT (fsLit "Int32") int32TyConKey
806 int64TyConName = tcQual gHC_INT (fsLit "Int64") int64TyConKey
809 word8TyConName, word16TyConName, word32TyConName, word64TyConName,
810 wordTyConName, wordDataConName :: Name
811 word8TyConName = tcQual gHC_WORD (fsLit "Word8") word8TyConKey
812 word16TyConName = tcQual gHC_WORD (fsLit "Word16") word16TyConKey
813 word32TyConName = tcQual gHC_WORD (fsLit "Word32") word32TyConKey
814 word64TyConName = tcQual gHC_WORD (fsLit "Word64") word64TyConKey
815 wordTyConName = tcQual gHC_WORD (fsLit "Word") wordTyConKey
816 wordDataConName = conName gHC_WORD (fsLit "W#") wordDataConKey
819 ptrTyConName, funPtrTyConName :: Name
820 ptrTyConName = tcQual gHC_PTR (fsLit "Ptr") ptrTyConKey
821 funPtrTyConName = tcQual gHC_PTR (fsLit "FunPtr") funPtrTyConKey
823 -- Foreign objects and weak pointers
824 stablePtrTyConName, newStablePtrName :: Name
825 stablePtrTyConName = tcQual gHC_STABLE (fsLit "StablePtr") stablePtrTyConKey
826 newStablePtrName = varQual gHC_STABLE (fsLit "newStablePtr") newStablePtrIdKey
830 runSTRepName = varQual gHC_ST (fsLit "runSTRep") runSTRepIdKey
832 -- Recursive-do notation
833 monadFixClassName, mfixName :: Name
834 monadFixClassName = clsQual mONAD_FIX (fsLit "MonadFix") monadFixClassKey
835 mfixName = methName mONAD_FIX (fsLit "mfix") mfixIdKey
838 arrAName, composeAName, firstAName, appAName, choiceAName, loopAName :: Name
839 arrAName = varQual aRROW (fsLit "arr") arrAIdKey
840 composeAName = varQual gHC_DESUGAR (fsLit ">>>") composeAIdKey
841 firstAName = varQual aRROW (fsLit "first") firstAIdKey
842 appAName = varQual aRROW (fsLit "app") appAIdKey
843 choiceAName = varQual aRROW (fsLit "|||") choiceAIdKey
844 loopAName = varQual aRROW (fsLit "loop") loopAIdKey
846 -- Monad comprehensions
847 guardMName, liftMName, groupMName, mzipName :: Name
848 guardMName = varQual mONAD (fsLit "guard") guardMIdKey
849 liftMName = varQual mONAD (fsLit "liftM") liftMIdKey
850 groupMName = varQual mONAD_GROUP (fsLit "mgroupWith") groupMIdKey
851 mzipName = varQual mONAD_ZIP (fsLit "mzip") mzipIdKey
854 -- Annotation type checking
855 toAnnotationWrapperName :: Name
856 toAnnotationWrapperName = varQual gHC_DESUGAR (fsLit "toAnnotationWrapper") toAnnotationWrapperIdKey
858 -- Other classes, needed for type defaulting
859 monadPlusClassName, randomClassName, randomGenClassName,
860 isStringClassName :: Name
861 monadPlusClassName = clsQual mONAD (fsLit "MonadPlus") monadPlusClassKey
862 randomClassName = clsQual rANDOM (fsLit "Random") randomClassKey
863 randomGenClassName = clsQual rANDOM (fsLit "RandomGen") randomGenClassKey
864 isStringClassName = clsQual dATA_STRING (fsLit "IsString") isStringClassKey
867 objectTyConName :: Name
868 objectTyConName = tcQual dOTNET (fsLit "Object") objectTyConKey
869 -- objectTyConName was "wTcQual", but that's gone now, and
870 -- I can't see why it was wired in anyway...
871 unmarshalObjectName, marshalObjectName, marshalStringName,
872 unmarshalStringName, checkDotnetResName :: Name
873 unmarshalObjectName = varQual dOTNET (fsLit "unmarshalObject") unmarshalObjectIdKey
874 marshalObjectName = varQual dOTNET (fsLit "marshalObject") marshalObjectIdKey
875 marshalStringName = varQual dOTNET (fsLit "marshalString") marshalStringIdKey
876 unmarshalStringName = varQual dOTNET (fsLit "unmarshalString") unmarshalStringIdKey
877 checkDotnetResName = varQual dOTNET (fsLit "checkResult") checkDotnetResNameIdKey
880 %************************************************************************
882 \subsection{Local helpers}
884 %************************************************************************
886 All these are original names; hence mkOrig
889 varQual, tcQual, clsQual :: Module -> FastString -> Unique -> Name
890 varQual = mk_known_key_name varName
891 tcQual = mk_known_key_name tcName
892 clsQual = mk_known_key_name clsName
894 mk_known_key_name :: NameSpace -> Module -> FastString -> Unique -> Name
895 mk_known_key_name space modu str unique
896 = mkExternalName unique modu (mkOccNameFS space str) noSrcSpan
898 conName :: Module -> FastString -> Unique -> Name
899 conName modu occ unique
900 = mkExternalName unique modu (mkOccNameFS dataName occ) noSrcSpan
902 methName :: Module -> FastString -> Unique -> Name
903 methName modu occ unique
904 = mkExternalName unique modu (mkVarOccFS occ) noSrcSpan
907 %************************************************************************
909 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
911 %************************************************************************
912 --MetaHaskell extension hand allocate keys here
915 boundedClassKey, enumClassKey, eqClassKey, floatingClassKey,
916 fractionalClassKey, integralClassKey, monadClassKey, dataClassKey,
917 functorClassKey, numClassKey, ordClassKey, readClassKey, realClassKey,
918 realFloatClassKey, realFracClassKey, showClassKey, ixClassKey :: Unique
919 boundedClassKey = mkPreludeClassUnique 1
920 enumClassKey = mkPreludeClassUnique 2
921 eqClassKey = mkPreludeClassUnique 3
922 floatingClassKey = mkPreludeClassUnique 5
923 fractionalClassKey = mkPreludeClassUnique 6
924 integralClassKey = mkPreludeClassUnique 7
925 monadClassKey = mkPreludeClassUnique 8
926 dataClassKey = mkPreludeClassUnique 9
927 functorClassKey = mkPreludeClassUnique 10
928 numClassKey = mkPreludeClassUnique 11
929 ordClassKey = mkPreludeClassUnique 12
930 readClassKey = mkPreludeClassUnique 13
931 realClassKey = mkPreludeClassUnique 14
932 realFloatClassKey = mkPreludeClassUnique 15
933 realFracClassKey = mkPreludeClassUnique 16
934 showClassKey = mkPreludeClassUnique 17
935 ixClassKey = mkPreludeClassUnique 18
937 typeableClassKey, typeable1ClassKey, typeable2ClassKey, typeable3ClassKey,
938 typeable4ClassKey, typeable5ClassKey, typeable6ClassKey, typeable7ClassKey
940 typeableClassKey = mkPreludeClassUnique 20
941 typeable1ClassKey = mkPreludeClassUnique 21
942 typeable2ClassKey = mkPreludeClassUnique 22
943 typeable3ClassKey = mkPreludeClassUnique 23
944 typeable4ClassKey = mkPreludeClassUnique 24
945 typeable5ClassKey = mkPreludeClassUnique 25
946 typeable6ClassKey = mkPreludeClassUnique 26
947 typeable7ClassKey = mkPreludeClassUnique 27
949 monadFixClassKey :: Unique
950 monadFixClassKey = mkPreludeClassUnique 28
952 monadPlusClassKey, randomClassKey, randomGenClassKey :: Unique
953 monadPlusClassKey = mkPreludeClassUnique 30
954 randomClassKey = mkPreludeClassUnique 31
955 randomGenClassKey = mkPreludeClassUnique 32
957 isStringClassKey :: Unique
958 isStringClassKey = mkPreludeClassUnique 33
960 applicativeClassKey, foldableClassKey, traversableClassKey :: Unique
961 applicativeClassKey = mkPreludeClassUnique 34
962 foldableClassKey = mkPreludeClassUnique 35
963 traversableClassKey = mkPreludeClassUnique 36
966 %************************************************************************
968 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
970 %************************************************************************
973 addrPrimTyConKey, arrayPrimTyConKey, boolTyConKey, byteArrayPrimTyConKey,
974 charPrimTyConKey, charTyConKey, doublePrimTyConKey, doubleTyConKey,
975 floatPrimTyConKey, floatTyConKey, funTyConKey, intPrimTyConKey,
976 intTyConKey, int8TyConKey, int16TyConKey, int32PrimTyConKey,
977 int32TyConKey, int64PrimTyConKey, int64TyConKey, integerTyConKey,
978 listTyConKey, foreignObjPrimTyConKey, weakPrimTyConKey,
979 mutableArrayPrimTyConKey, mutableByteArrayPrimTyConKey,
980 orderingTyConKey, mVarPrimTyConKey, ratioTyConKey, rationalTyConKey,
981 realWorldTyConKey, stablePtrPrimTyConKey, stablePtrTyConKey,
982 anyTyConKey :: Unique
983 addrPrimTyConKey = mkPreludeTyConUnique 1
984 arrayPrimTyConKey = mkPreludeTyConUnique 3
985 boolTyConKey = mkPreludeTyConUnique 4
986 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
987 charPrimTyConKey = mkPreludeTyConUnique 7
988 charTyConKey = mkPreludeTyConUnique 8
989 doublePrimTyConKey = mkPreludeTyConUnique 9
990 doubleTyConKey = mkPreludeTyConUnique 10
991 floatPrimTyConKey = mkPreludeTyConUnique 11
992 floatTyConKey = mkPreludeTyConUnique 12
993 funTyConKey = mkPreludeTyConUnique 13
994 intPrimTyConKey = mkPreludeTyConUnique 14
995 intTyConKey = mkPreludeTyConUnique 15
996 int8TyConKey = mkPreludeTyConUnique 16
997 int16TyConKey = mkPreludeTyConUnique 17
998 int32PrimTyConKey = mkPreludeTyConUnique 18
999 int32TyConKey = mkPreludeTyConUnique 19
1000 int64PrimTyConKey = mkPreludeTyConUnique 20
1001 int64TyConKey = mkPreludeTyConUnique 21
1002 integerTyConKey = mkPreludeTyConUnique 22
1003 listTyConKey = mkPreludeTyConUnique 23
1004 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
1005 weakPrimTyConKey = mkPreludeTyConUnique 27
1006 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
1007 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
1008 orderingTyConKey = mkPreludeTyConUnique 30
1009 mVarPrimTyConKey = mkPreludeTyConUnique 31
1010 ratioTyConKey = mkPreludeTyConUnique 32
1011 rationalTyConKey = mkPreludeTyConUnique 33
1012 realWorldTyConKey = mkPreludeTyConUnique 34
1013 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
1014 stablePtrTyConKey = mkPreludeTyConUnique 36
1015 anyTyConKey = mkPreludeTyConUnique 37
1017 statePrimTyConKey, stableNamePrimTyConKey, stableNameTyConKey,
1018 mutVarPrimTyConKey, ioTyConKey,
1019 wordPrimTyConKey, wordTyConKey, word8TyConKey, word16TyConKey,
1020 word32PrimTyConKey, word32TyConKey, word64PrimTyConKey, word64TyConKey,
1021 liftedConKey, unliftedConKey, anyBoxConKey, kindConKey, boxityConKey,
1022 typeConKey, threadIdPrimTyConKey, bcoPrimTyConKey, ptrTyConKey,
1023 funPtrTyConKey, tVarPrimTyConKey :: Unique
1024 statePrimTyConKey = mkPreludeTyConUnique 50
1025 stableNamePrimTyConKey = mkPreludeTyConUnique 51
1026 stableNameTyConKey = mkPreludeTyConUnique 52
1027 mutVarPrimTyConKey = mkPreludeTyConUnique 55
1028 ioTyConKey = mkPreludeTyConUnique 56
1029 wordPrimTyConKey = mkPreludeTyConUnique 58
1030 wordTyConKey = mkPreludeTyConUnique 59
1031 word8TyConKey = mkPreludeTyConUnique 60
1032 word16TyConKey = mkPreludeTyConUnique 61
1033 word32PrimTyConKey = mkPreludeTyConUnique 62
1034 word32TyConKey = mkPreludeTyConUnique 63
1035 word64PrimTyConKey = mkPreludeTyConUnique 64
1036 word64TyConKey = mkPreludeTyConUnique 65
1037 liftedConKey = mkPreludeTyConUnique 66
1038 unliftedConKey = mkPreludeTyConUnique 67
1039 anyBoxConKey = mkPreludeTyConUnique 68
1040 kindConKey = mkPreludeTyConUnique 69
1041 boxityConKey = mkPreludeTyConUnique 70
1042 typeConKey = mkPreludeTyConUnique 71
1043 threadIdPrimTyConKey = mkPreludeTyConUnique 72
1044 bcoPrimTyConKey = mkPreludeTyConUnique 73
1045 ptrTyConKey = mkPreludeTyConUnique 74
1046 funPtrTyConKey = mkPreludeTyConUnique 75
1047 tVarPrimTyConKey = mkPreludeTyConUnique 76
1049 -- Generic Type Constructors
1050 crossTyConKey, plusTyConKey, genUnitTyConKey :: Unique
1051 crossTyConKey = mkPreludeTyConUnique 79
1052 plusTyConKey = mkPreludeTyConUnique 80
1053 genUnitTyConKey = mkPreludeTyConUnique 81
1055 -- Parallel array type constructor
1056 parrTyConKey :: Unique
1057 parrTyConKey = mkPreludeTyConUnique 82
1060 objectTyConKey :: Unique
1061 objectTyConKey = mkPreludeTyConUnique 83
1063 eitherTyConKey :: Unique
1064 eitherTyConKey = mkPreludeTyConUnique 84
1066 -- Super Kinds constructors
1067 tySuperKindTyConKey, coSuperKindTyConKey :: Unique
1068 tySuperKindTyConKey = mkPreludeTyConUnique 85
1069 coSuperKindTyConKey = mkPreludeTyConUnique 86
1071 -- Kind constructors
1072 liftedTypeKindTyConKey, openTypeKindTyConKey, unliftedTypeKindTyConKey,
1073 ubxTupleKindTyConKey, argTypeKindTyConKey :: Unique
1074 liftedTypeKindTyConKey = mkPreludeTyConUnique 87
1075 openTypeKindTyConKey = mkPreludeTyConUnique 88
1076 unliftedTypeKindTyConKey = mkPreludeTyConUnique 89
1077 ubxTupleKindTyConKey = mkPreludeTyConUnique 90
1078 argTypeKindTyConKey = mkPreludeTyConUnique 91
1080 -- Coercion constructors
1081 symCoercionTyConKey, transCoercionTyConKey, leftCoercionTyConKey,
1082 rightCoercionTyConKey, instCoercionTyConKey, unsafeCoercionTyConKey,
1083 csel1CoercionTyConKey, csel2CoercionTyConKey, cselRCoercionTyConKey
1085 symCoercionTyConKey = mkPreludeTyConUnique 93
1086 transCoercionTyConKey = mkPreludeTyConUnique 94
1087 leftCoercionTyConKey = mkPreludeTyConUnique 95
1088 rightCoercionTyConKey = mkPreludeTyConUnique 96
1089 instCoercionTyConKey = mkPreludeTyConUnique 97
1090 unsafeCoercionTyConKey = mkPreludeTyConUnique 98
1091 csel1CoercionTyConKey = mkPreludeTyConUnique 99
1092 csel2CoercionTyConKey = mkPreludeTyConUnique 100
1093 cselRCoercionTyConKey = mkPreludeTyConUnique 101
1095 unknownTyConKey, unknown1TyConKey, unknown2TyConKey, unknown3TyConKey,
1096 opaqueTyConKey :: Unique
1097 unknownTyConKey = mkPreludeTyConUnique 129
1098 unknown1TyConKey = mkPreludeTyConUnique 130
1099 unknown2TyConKey = mkPreludeTyConUnique 131
1100 unknown3TyConKey = mkPreludeTyConUnique 132
1101 opaqueTyConKey = mkPreludeTyConUnique 133
1103 stringTyConKey :: Unique
1104 stringTyConKey = mkPreludeTyConUnique 134
1106 ---------------- Template Haskell -------------------
1107 -- USES TyConUniques 200-299
1108 -----------------------------------------------------
1110 unitTyConKey :: Unique
1111 unitTyConKey = mkTupleTyConUnique Boxed 0
1114 %************************************************************************
1116 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1118 %************************************************************************
1121 charDataConKey, consDataConKey, doubleDataConKey, falseDataConKey,
1122 floatDataConKey, intDataConKey, nilDataConKey, ratioDataConKey,
1123 stableNameDataConKey, trueDataConKey, wordDataConKey,
1124 ioDataConKey, integerDataConKey :: Unique
1125 charDataConKey = mkPreludeDataConUnique 1
1126 consDataConKey = mkPreludeDataConUnique 2
1127 doubleDataConKey = mkPreludeDataConUnique 3
1128 falseDataConKey = mkPreludeDataConUnique 4
1129 floatDataConKey = mkPreludeDataConUnique 5
1130 intDataConKey = mkPreludeDataConUnique 6
1131 nilDataConKey = mkPreludeDataConUnique 11
1132 ratioDataConKey = mkPreludeDataConUnique 12
1133 stableNameDataConKey = mkPreludeDataConUnique 14
1134 trueDataConKey = mkPreludeDataConUnique 15
1135 wordDataConKey = mkPreludeDataConUnique 16
1136 ioDataConKey = mkPreludeDataConUnique 17
1137 integerDataConKey = mkPreludeDataConUnique 18
1139 -- Generic data constructors
1140 crossDataConKey, inlDataConKey, inrDataConKey, genUnitDataConKey :: Unique
1141 crossDataConKey = mkPreludeDataConUnique 20
1142 inlDataConKey = mkPreludeDataConUnique 21
1143 inrDataConKey = mkPreludeDataConUnique 22
1144 genUnitDataConKey = mkPreludeDataConUnique 23
1146 -- Data constructor for parallel arrays
1147 parrDataConKey :: Unique
1148 parrDataConKey = mkPreludeDataConUnique 24
1150 leftDataConKey, rightDataConKey :: Unique
1151 leftDataConKey = mkPreludeDataConUnique 25
1152 rightDataConKey = mkPreludeDataConUnique 26
1155 %************************************************************************
1157 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1159 %************************************************************************
1162 absentErrorIdKey, augmentIdKey, appendIdKey, buildIdKey, errorIdKey,
1163 foldlIdKey, foldrIdKey, recSelErrorIdKey,
1164 integerMinusOneIdKey, integerPlusOneIdKey,
1165 integerPlusTwoIdKey, integerZeroIdKey,
1166 int2IntegerIdKey, seqIdKey, irrefutPatErrorIdKey, eqStringIdKey,
1167 noMethodBindingErrorIdKey, nonExhaustiveGuardsErrorIdKey,
1168 runtimeErrorIdKey, parErrorIdKey, parIdKey, patErrorIdKey,
1169 realWorldPrimIdKey, recConErrorIdKey, recUpdErrorIdKey,
1170 traceIdKey, wildCardKey,
1171 unpackCStringUtf8IdKey, unpackCStringAppendIdKey,
1172 unpackCStringFoldrIdKey, unpackCStringIdKey :: Unique
1173 wildCardKey = mkPreludeMiscIdUnique 0 -- See Note [WildCard]
1174 absentErrorIdKey = mkPreludeMiscIdUnique 1
1175 augmentIdKey = mkPreludeMiscIdUnique 3
1176 appendIdKey = mkPreludeMiscIdUnique 4
1177 buildIdKey = mkPreludeMiscIdUnique 5
1178 errorIdKey = mkPreludeMiscIdUnique 6
1179 foldlIdKey = mkPreludeMiscIdUnique 7
1180 foldrIdKey = mkPreludeMiscIdUnique 8
1181 recSelErrorIdKey = mkPreludeMiscIdUnique 9
1182 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
1183 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
1184 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
1185 integerZeroIdKey = mkPreludeMiscIdUnique 13
1186 int2IntegerIdKey = mkPreludeMiscIdUnique 14
1187 seqIdKey = mkPreludeMiscIdUnique 15
1188 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
1189 eqStringIdKey = mkPreludeMiscIdUnique 17
1190 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
1191 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1192 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
1193 parErrorIdKey = mkPreludeMiscIdUnique 21
1194 parIdKey = mkPreludeMiscIdUnique 22
1195 patErrorIdKey = mkPreludeMiscIdUnique 23
1196 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
1197 recConErrorIdKey = mkPreludeMiscIdUnique 25
1198 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
1199 traceIdKey = mkPreludeMiscIdUnique 27
1200 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
1201 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
1202 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
1203 unpackCStringIdKey = mkPreludeMiscIdUnique 31
1205 unsafeCoerceIdKey, concatIdKey, filterIdKey, zipIdKey, bindIOIdKey,
1206 returnIOIdKey, deRefStablePtrIdKey, newStablePtrIdKey,
1207 smallIntegerIdKey, plusIntegerIdKey, timesIntegerIdKey,
1208 printIdKey, failIOIdKey, nullAddrIdKey, voidArgIdKey,
1209 fstIdKey, sndIdKey, otherwiseIdKey, assertIdKey, runSTRepIdKey :: Unique
1210 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
1211 concatIdKey = mkPreludeMiscIdUnique 33
1212 filterIdKey = mkPreludeMiscIdUnique 34
1213 zipIdKey = mkPreludeMiscIdUnique 35
1214 bindIOIdKey = mkPreludeMiscIdUnique 36
1215 returnIOIdKey = mkPreludeMiscIdUnique 37
1216 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
1217 newStablePtrIdKey = mkPreludeMiscIdUnique 39
1218 smallIntegerIdKey = mkPreludeMiscIdUnique 40
1219 plusIntegerIdKey = mkPreludeMiscIdUnique 41
1220 timesIntegerIdKey = mkPreludeMiscIdUnique 42
1221 printIdKey = mkPreludeMiscIdUnique 43
1222 failIOIdKey = mkPreludeMiscIdUnique 44
1223 nullAddrIdKey = mkPreludeMiscIdUnique 46
1224 voidArgIdKey = mkPreludeMiscIdUnique 47
1225 fstIdKey = mkPreludeMiscIdUnique 49
1226 sndIdKey = mkPreludeMiscIdUnique 50
1227 otherwiseIdKey = mkPreludeMiscIdUnique 51
1228 assertIdKey = mkPreludeMiscIdUnique 53
1229 runSTRepIdKey = mkPreludeMiscIdUnique 54
1231 rootMainKey, runMainKey :: Unique
1232 rootMainKey = mkPreludeMiscIdUnique 55
1233 runMainKey = mkPreludeMiscIdUnique 56
1235 thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
1236 thenIOIdKey = mkPreludeMiscIdUnique 59
1237 lazyIdKey = mkPreludeMiscIdUnique 60
1238 assertErrorIdKey = mkPreludeMiscIdUnique 61
1240 breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
1241 breakpointJumpIdKey, breakpointCondJumpIdKey,
1242 breakpointAutoJumpIdKey :: Unique
1243 breakpointIdKey = mkPreludeMiscIdUnique 62
1244 breakpointCondIdKey = mkPreludeMiscIdUnique 63
1245 breakpointAutoIdKey = mkPreludeMiscIdUnique 64
1246 breakpointJumpIdKey = mkPreludeMiscIdUnique 65
1247 breakpointCondJumpIdKey = mkPreludeMiscIdUnique 66
1248 breakpointAutoJumpIdKey = mkPreludeMiscIdUnique 67
1250 inlineIdKey :: Unique
1251 inlineIdKey = mkPreludeMiscIdUnique 68
1253 mapIdKey, groupWithIdKey, dollarIdKey :: Unique
1254 mapIdKey = mkPreludeMiscIdUnique 69
1255 groupWithIdKey = mkPreludeMiscIdUnique 70
1256 dollarIdKey = mkPreludeMiscIdUnique 71
1258 -- Parallel array functions
1259 singletonPIdKey, nullPIdKey, lengthPIdKey, replicatePIdKey, mapPIdKey,
1260 filterPIdKey, zipPIdKey, crossMapPIdKey, indexPIdKey, toPIdKey,
1261 enumFromToPIdKey, enumFromThenToPIdKey, emptyPIdKey, appPIdKey :: Unique
1262 singletonPIdKey = mkPreludeMiscIdUnique 79
1263 nullPIdKey = mkPreludeMiscIdUnique 80
1264 lengthPIdKey = mkPreludeMiscIdUnique 81
1265 replicatePIdKey = mkPreludeMiscIdUnique 82
1266 mapPIdKey = mkPreludeMiscIdUnique 83
1267 filterPIdKey = mkPreludeMiscIdUnique 84
1268 zipPIdKey = mkPreludeMiscIdUnique 85
1269 crossMapPIdKey = mkPreludeMiscIdUnique 86
1270 indexPIdKey = mkPreludeMiscIdUnique 87
1271 toPIdKey = mkPreludeMiscIdUnique 88
1272 enumFromToPIdKey = mkPreludeMiscIdUnique 89
1273 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
1274 emptyPIdKey = mkPreludeMiscIdUnique 91
1275 appPIdKey = mkPreludeMiscIdUnique 92
1278 unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
1279 unmarshalStringIdKey, checkDotnetResNameIdKey :: Unique
1280 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
1281 marshalObjectIdKey = mkPreludeMiscIdUnique 95
1282 marshalStringIdKey = mkPreludeMiscIdUnique 96
1283 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
1284 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
1288 Certain class operations from Prelude classes. They get their own
1289 uniques so we can look them up easily when we want to conjure them up
1290 during type checking.
1293 -- Just a place holder for unbound variables produced by the renamer:
1294 unboundKey :: Unique
1295 unboundKey = mkPreludeMiscIdUnique 101
1297 fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
1298 enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
1299 enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
1300 failMClassOpKey, bindMClassOpKey, thenMClassOpKey, returnMClassOpKey
1302 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
1303 minusClassOpKey = mkPreludeMiscIdUnique 103
1304 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
1305 enumFromClassOpKey = mkPreludeMiscIdUnique 105
1306 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
1307 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
1308 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
1309 eqClassOpKey = mkPreludeMiscIdUnique 109
1310 geClassOpKey = mkPreludeMiscIdUnique 110
1311 negateClassOpKey = mkPreludeMiscIdUnique 111
1312 failMClassOpKey = mkPreludeMiscIdUnique 112
1313 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
1314 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
1315 returnMClassOpKey = mkPreludeMiscIdUnique 117
1317 -- Recursive do notation
1319 mfixIdKey = mkPreludeMiscIdUnique 118
1322 arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
1323 loopAIdKey :: Unique
1324 arrAIdKey = mkPreludeMiscIdUnique 119
1325 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
1326 firstAIdKey = mkPreludeMiscIdUnique 121
1327 appAIdKey = mkPreludeMiscIdUnique 122
1328 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
1329 loopAIdKey = mkPreludeMiscIdUnique 124
1331 fromStringClassOpKey :: Unique
1332 fromStringClassOpKey = mkPreludeMiscIdUnique 125
1334 -- Annotation type checking
1335 toAnnotationWrapperIdKey :: Unique
1336 toAnnotationWrapperIdKey = mkPreludeMiscIdUnique 126
1338 -- Conversion functions
1339 fromIntegralIdKey, realToFracIdKey, toIntegerClassOpKey, toRationalClassOpKey :: Unique
1340 fromIntegralIdKey = mkPreludeMiscIdUnique 127
1341 realToFracIdKey = mkPreludeMiscIdUnique 128
1342 toIntegerClassOpKey = mkPreludeMiscIdUnique 129
1343 toRationalClassOpKey = mkPreludeMiscIdUnique 130
1345 -- Monad comprehensions
1346 guardMIdKey, liftMIdKey, groupMIdKey, mzipIdKey :: Unique
1347 guardMIdKey = mkPreludeMiscIdUnique 131
1348 liftMIdKey = mkPreludeMiscIdUnique 132
1349 groupMIdKey = mkPreludeMiscIdUnique 133
1350 mzipIdKey = mkPreludeMiscIdUnique 134
1353 ---------------- Template Haskell -------------------
1354 -- USES IdUniques 200-499
1355 -----------------------------------------------------
1359 %************************************************************************
1361 \subsection{Standard groups of types}
1363 %************************************************************************
1366 numericTyKeys :: [Unique]
1375 kindKeys :: [Unique]
1376 kindKeys = [ liftedTypeKindTyConKey
1377 , openTypeKindTyConKey
1378 , unliftedTypeKindTyConKey
1379 , ubxTupleKindTyConKey
1380 , argTypeKindTyConKey ]
1384 %************************************************************************
1386 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1388 %************************************************************************
1390 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1391 even though every numeric class has these two as a superclass,
1392 because the list of ambiguous dictionaries hasn't been simplified.
1395 numericClassKeys :: [Unique]
1401 ++ fractionalClassKeys
1403 fractionalClassKeys :: [Unique]
1404 fractionalClassKeys =
1405 [ fractionalClassKey
1411 -- the strictness analyser needs to know about numeric types
1412 -- (see SaAbsInt.lhs)
1413 needsDataDeclCtxtClassKeys :: [Unique]
1414 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1418 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1419 -- and are: "classes defined in the Prelude or a standard library"
1420 standardClassKeys :: [Unique]
1421 standardClassKeys = derivableClassKeys ++ numericClassKeys
1422 ++ [randomClassKey, randomGenClassKey,
1424 monadClassKey, monadPlusClassKey,
1426 applicativeClassKey, foldableClassKey, traversableClassKey
1430 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1434 derivableClassKeys :: [Unique]
1436 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1437 boundedClassKey, showClassKey, readClassKey ]