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,
216 hetmet_brak_name, hetmet_esc_name, hetmet_csp_name,
217 hetmet_guest_integer_literal_name, hetmet_guest_string_literal_name,
218 hetmet_guest_char_literal_name,
220 -- Annotation type checking
221 toAnnotationWrapperName
224 , eitherTyConName, leftDataConName, rightDataConName
227 , objectTyConName, marshalObjectName, unmarshalObjectName
228 , marshalStringName, unmarshalStringName, checkDotnetResName
231 genericTyConNames :: [Name]
232 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
234 -- Know names from the DPH package which vary depending on the selected DPH backend.
236 dphKnownKeyNames :: PackageId -> [Name]
237 dphKnownKeyNames dphPkg
240 -- Parallel array operations
241 nullPName, lengthPName, replicatePName, singletonPName, mapPName,
242 filterPName, zipPName, crossMapPName, indexPName,
243 toPName, emptyPName, appPName,
244 enumFromToPName, enumFromThenToPName
250 %************************************************************************
252 \subsection{Module names}
254 %************************************************************************
257 --MetaHaskell Extension Add a new module here
260 pRELUDE = mkBaseModule_ pRELUDE_NAME
262 gHC_PRIM, gHC_TYPES, gHC_UNIT, gHC_ORDERING, gHC_GENERICS,
264 gHC_CLASSES, gHC_BASE, gHC_ENUM,
265 gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_INTEGER_TYPE, gHC_LIST,
266 gHC_HETMET_CODETYPES,
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, aRROW, cONTROL_APPLICATIVE,
272 gHC_DESUGAR, rANDOM, gHC_EXTS, cONTROL_EXCEPTION_BASE :: Module
274 gHC_PRIM = mkPrimModule (fsLit "GHC.Prim") -- Primitive types and values
275 gHC_TYPES = mkPrimModule (fsLit "GHC.Types")
276 gHC_UNIT = mkPrimModule (fsLit "GHC.Unit")
277 gHC_ORDERING = mkPrimModule (fsLit "GHC.Ordering")
278 gHC_GENERICS = mkPrimModule (fsLit "GHC.Generics")
279 gHC_MAGIC = mkPrimModule (fsLit "GHC.Magic")
281 gHC_CLASSES = mkBaseModule (fsLit "GHC.Classes")
282 gHC_BASE = mkBaseModule (fsLit "GHC.Base")
283 gHC_ENUM = mkBaseModule (fsLit "GHC.Enum")
284 gHC_SHOW = mkBaseModule (fsLit "GHC.Show")
285 gHC_READ = mkBaseModule (fsLit "GHC.Read")
286 gHC_NUM = mkBaseModule (fsLit "GHC.Num")
287 gHC_INTEGER = mkIntegerModule (fsLit "GHC.Integer")
288 gHC_INTEGER_TYPE= mkIntegerModule (fsLit "GHC.Integer.Type")
289 gHC_HETMET_CODETYPES = mkBaseModule (fsLit "GHC.HetMet.CodeTypes")
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 aRROW = mkBaseModule (fsLit "Control.Arrow")
322 cONTROL_APPLICATIVE = mkBaseModule (fsLit "Control.Applicative")
323 gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
324 rANDOM = mkBaseModule (fsLit "System.Random")
325 gHC_EXTS = mkBaseModule (fsLit "GHC.Exts")
326 cONTROL_EXCEPTION_BASE = mkBaseModule (fsLit "Control.Exception.Base")
328 gHC_PARR :: PackageId -> Module
329 gHC_PARR pkg = mkModule pkg (mkModuleNameFS (fsLit "Data.Array.Parallel"))
332 gHC_PARR' = mkBaseModule (fsLit "GHC.PArr")
334 mAIN, rOOT_MAIN :: Module
335 mAIN = mkMainModule_ mAIN_NAME
336 rOOT_MAIN = mkMainModule (fsLit ":Main") -- Root module for initialisation
338 -- The ':xxx' makes a module name that the user can never
339 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
340 -- module name still starts with a capital letter, which keeps
341 -- the z-encoded version consistent.
342 iNTERACTIVE :: Module
343 iNTERACTIVE = mkMainModule (fsLit ":Interactive")
345 pRELUDE_NAME, mAIN_NAME :: ModuleName
346 pRELUDE_NAME = mkModuleNameFS (fsLit "Prelude")
347 mAIN_NAME = mkModuleNameFS (fsLit "Main")
349 mkPrimModule :: FastString -> Module
350 mkPrimModule m = mkModule primPackageId (mkModuleNameFS m)
352 mkIntegerModule :: FastString -> Module
353 mkIntegerModule m = mkModule integerPackageId (mkModuleNameFS m)
355 mkBaseModule :: FastString -> Module
356 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
358 mkBaseModule_ :: ModuleName -> Module
359 mkBaseModule_ m = mkModule basePackageId m
361 mkMainModule :: FastString -> Module
362 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
364 mkMainModule_ :: ModuleName -> Module
365 mkMainModule_ m = mkModule mainPackageId m
368 %************************************************************************
370 \subsection{Constructing the names of tuples
372 %************************************************************************
375 mkTupleModule :: Boxity -> Arity -> Module
376 mkTupleModule Boxed 0 = gHC_UNIT
377 mkTupleModule Boxed _ = gHC_TUPLE
378 mkTupleModule Unboxed _ = gHC_PRIM
382 %************************************************************************
386 %************************************************************************
389 main_RDR_Unqual :: RdrName
390 main_RDR_Unqual = mkUnqual varName (fsLit "main")
391 -- We definitely don't want an Orig RdrName, because
392 -- main might, in principle, be imported into module Main
394 forall_tv_RDR, dot_tv_RDR :: RdrName
395 forall_tv_RDR = mkUnqual tvName (fsLit "forall")
396 dot_tv_RDR = mkUnqual tvName (fsLit ".")
398 eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
399 ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
400 eq_RDR = nameRdrName eqName
401 ge_RDR = nameRdrName geName
402 ne_RDR = varQual_RDR gHC_CLASSES (fsLit "/=")
403 le_RDR = varQual_RDR gHC_CLASSES (fsLit "<=")
404 lt_RDR = varQual_RDR gHC_CLASSES (fsLit "<")
405 gt_RDR = varQual_RDR gHC_CLASSES (fsLit ">")
406 compare_RDR = varQual_RDR gHC_CLASSES (fsLit "compare")
407 ltTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "LT")
408 eqTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "EQ")
409 gtTag_RDR = dataQual_RDR gHC_ORDERING (fsLit "GT")
411 eqClass_RDR, numClass_RDR, ordClass_RDR, enumClass_RDR, monadClass_RDR
413 eqClass_RDR = nameRdrName eqClassName
414 numClass_RDR = nameRdrName numClassName
415 ordClass_RDR = nameRdrName ordClassName
416 enumClass_RDR = nameRdrName enumClassName
417 monadClass_RDR = nameRdrName monadClassName
419 map_RDR, append_RDR :: RdrName
420 map_RDR = varQual_RDR gHC_BASE (fsLit "map")
421 append_RDR = varQual_RDR gHC_BASE (fsLit "++")
423 foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR :: RdrName
424 foldr_RDR = nameRdrName foldrName
425 build_RDR = nameRdrName buildName
426 returnM_RDR = nameRdrName returnMName
427 bindM_RDR = nameRdrName bindMName
428 failM_RDR = nameRdrName failMName
430 left_RDR, right_RDR :: RdrName
431 left_RDR = nameRdrName leftDataConName
432 right_RDR = nameRdrName rightDataConName
434 fromEnum_RDR, toEnum_RDR :: RdrName
435 fromEnum_RDR = varQual_RDR gHC_ENUM (fsLit "fromEnum")
436 toEnum_RDR = varQual_RDR gHC_ENUM (fsLit "toEnum")
438 enumFrom_RDR, enumFromTo_RDR, enumFromThen_RDR, enumFromThenTo_RDR :: RdrName
439 enumFrom_RDR = nameRdrName enumFromName
440 enumFromTo_RDR = nameRdrName enumFromToName
441 enumFromThen_RDR = nameRdrName enumFromThenName
442 enumFromThenTo_RDR = nameRdrName enumFromThenToName
444 ratioDataCon_RDR, plusInteger_RDR, timesInteger_RDR :: RdrName
445 ratioDataCon_RDR = nameRdrName ratioDataConName
446 plusInteger_RDR = nameRdrName plusIntegerName
447 timesInteger_RDR = nameRdrName timesIntegerName
449 ioDataCon_RDR :: RdrName
450 ioDataCon_RDR = nameRdrName ioDataConName
452 eqString_RDR, unpackCString_RDR, unpackCStringFoldr_RDR,
453 unpackCStringUtf8_RDR :: RdrName
454 eqString_RDR = nameRdrName eqStringName
455 unpackCString_RDR = nameRdrName unpackCStringName
456 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
457 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
459 newStablePtr_RDR, wordDataCon_RDR :: RdrName
460 newStablePtr_RDR = nameRdrName newStablePtrName
461 wordDataCon_RDR = dataQual_RDR gHC_WORD (fsLit "W#")
463 bindIO_RDR, returnIO_RDR :: RdrName
464 bindIO_RDR = nameRdrName bindIOName
465 returnIO_RDR = nameRdrName returnIOName
467 fromInteger_RDR, fromRational_RDR, minus_RDR, times_RDR, plus_RDR :: RdrName
468 fromInteger_RDR = nameRdrName fromIntegerName
469 fromRational_RDR = nameRdrName fromRationalName
470 minus_RDR = nameRdrName minusName
471 times_RDR = varQual_RDR gHC_NUM (fsLit "*")
472 plus_RDR = varQual_RDR gHC_NUM (fsLit "+")
474 fromString_RDR :: RdrName
475 fromString_RDR = nameRdrName fromStringName
477 compose_RDR :: RdrName
478 compose_RDR = varQual_RDR gHC_BASE (fsLit ".")
480 not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
481 and_RDR, range_RDR, inRange_RDR, index_RDR,
482 unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
483 and_RDR = varQual_RDR gHC_CLASSES (fsLit "&&")
484 not_RDR = varQual_RDR gHC_CLASSES (fsLit "not")
485 getTag_RDR = varQual_RDR gHC_BASE (fsLit "getTag")
486 succ_RDR = varQual_RDR gHC_ENUM (fsLit "succ")
487 pred_RDR = varQual_RDR gHC_ENUM (fsLit "pred")
488 minBound_RDR = varQual_RDR gHC_ENUM (fsLit "minBound")
489 maxBound_RDR = varQual_RDR gHC_ENUM (fsLit "maxBound")
490 range_RDR = varQual_RDR gHC_ARR (fsLit "range")
491 inRange_RDR = varQual_RDR gHC_ARR (fsLit "inRange")
492 index_RDR = varQual_RDR gHC_ARR (fsLit "index")
493 unsafeIndex_RDR = varQual_RDR gHC_ARR (fsLit "unsafeIndex")
494 unsafeRangeSize_RDR = varQual_RDR gHC_ARR (fsLit "unsafeRangeSize")
496 readList_RDR, readListDefault_RDR, readListPrec_RDR, readListPrecDefault_RDR,
497 readPrec_RDR, parens_RDR, choose_RDR, lexP_RDR :: RdrName
498 readList_RDR = varQual_RDR gHC_READ (fsLit "readList")
499 readListDefault_RDR = varQual_RDR gHC_READ (fsLit "readListDefault")
500 readListPrec_RDR = varQual_RDR gHC_READ (fsLit "readListPrec")
501 readListPrecDefault_RDR = varQual_RDR gHC_READ (fsLit "readListPrecDefault")
502 readPrec_RDR = varQual_RDR gHC_READ (fsLit "readPrec")
503 parens_RDR = varQual_RDR gHC_READ (fsLit "parens")
504 choose_RDR = varQual_RDR gHC_READ (fsLit "choose")
505 lexP_RDR = varQual_RDR gHC_READ (fsLit "lexP")
507 punc_RDR, ident_RDR, symbol_RDR :: RdrName
508 punc_RDR = dataQual_RDR lEX (fsLit "Punc")
509 ident_RDR = dataQual_RDR lEX (fsLit "Ident")
510 symbol_RDR = dataQual_RDR lEX (fsLit "Symbol")
512 step_RDR, alt_RDR, reset_RDR, prec_RDR :: RdrName
513 step_RDR = varQual_RDR rEAD_PREC (fsLit "step")
514 alt_RDR = varQual_RDR rEAD_PREC (fsLit "+++")
515 reset_RDR = varQual_RDR rEAD_PREC (fsLit "reset")
516 prec_RDR = varQual_RDR rEAD_PREC (fsLit "prec")
518 showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR,
519 showSpace_RDR, showParen_RDR :: RdrName
520 showList_RDR = varQual_RDR gHC_SHOW (fsLit "showList")
521 showList___RDR = varQual_RDR gHC_SHOW (fsLit "showList__")
522 showsPrec_RDR = varQual_RDR gHC_SHOW (fsLit "showsPrec")
523 showString_RDR = varQual_RDR gHC_SHOW (fsLit "showString")
524 showSpace_RDR = varQual_RDR gHC_SHOW (fsLit "showSpace")
525 showParen_RDR = varQual_RDR gHC_SHOW (fsLit "showParen")
527 typeOf_RDR, mkTypeRep_RDR, mkTyConRep_RDR :: RdrName
528 typeOf_RDR = varQual_RDR tYPEABLE (fsLit "typeOf")
529 mkTypeRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyConApp")
530 mkTyConRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyCon")
532 undefined_RDR :: RdrName
533 undefined_RDR = varQual_RDR gHC_ERR (fsLit "undefined")
535 crossDataCon_RDR, inlDataCon_RDR, inrDataCon_RDR, genUnitDataCon_RDR :: RdrName
536 crossDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit ":*:")
537 inlDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inl")
538 inrDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Inr")
539 genUnitDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Unit")
541 fmap_RDR, pure_RDR, ap_RDR, foldable_foldr_RDR, traverse_RDR :: RdrName
542 fmap_RDR = varQual_RDR gHC_BASE (fsLit "fmap")
543 pure_RDR = varQual_RDR cONTROL_APPLICATIVE (fsLit "pure")
544 ap_RDR = varQual_RDR cONTROL_APPLICATIVE (fsLit "<*>")
545 foldable_foldr_RDR = varQual_RDR dATA_FOLDABLE (fsLit "foldr")
546 traverse_RDR = varQual_RDR dATA_TRAVERSABLE (fsLit "traverse")
548 ----------------------
549 varQual_RDR, tcQual_RDR, clsQual_RDR, dataQual_RDR
550 :: Module -> FastString -> RdrName
551 varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str)
552 tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str)
553 clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str)
554 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
557 %************************************************************************
559 \subsection{Known-key names}
561 %************************************************************************
563 Many of these Names are not really "built in", but some parts of the
564 compiler (notably the deriving mechanism) need to mention their names,
565 and it's convenient to write them all down in one place.
567 --MetaHaskell Extension add the constrs and the lower case case
568 -- guys as well (perhaps) e.g. see trueDataConName below
573 wildCardName = mkSystemVarName wildCardKey (fsLit "wild")
575 runMainIOName :: Name
576 runMainIOName = varQual gHC_TOP_HANDLER (fsLit "runMainIO") runMainKey
578 orderingTyConName :: Name
579 orderingTyConName = tcQual gHC_ORDERING (fsLit "Ordering") orderingTyConKey
581 eitherTyConName, leftDataConName, rightDataConName :: Name
582 eitherTyConName = tcQual dATA_EITHER (fsLit "Either") eitherTyConKey
583 leftDataConName = conName dATA_EITHER (fsLit "Left") leftDataConKey
584 rightDataConName = conName dATA_EITHER (fsLit "Right") rightDataConKey
587 crossTyConName, plusTyConName, genUnitTyConName :: Name
588 crossTyConName = tcQual gHC_GENERICS (fsLit ":*:") crossTyConKey
589 plusTyConName = tcQual gHC_GENERICS (fsLit ":+:") plusTyConKey
590 genUnitTyConName = tcQual gHC_GENERICS (fsLit "Unit") genUnitTyConKey
592 -- Base strings Strings
593 unpackCStringName, unpackCStringAppendName, unpackCStringFoldrName,
594 unpackCStringUtf8Name, eqStringName, stringTyConName :: Name
595 unpackCStringName = varQual gHC_BASE (fsLit "unpackCString#") unpackCStringIdKey
596 unpackCStringAppendName = varQual gHC_BASE (fsLit "unpackAppendCString#") unpackCStringAppendIdKey
597 unpackCStringFoldrName = varQual gHC_BASE (fsLit "unpackFoldrCString#") unpackCStringFoldrIdKey
598 unpackCStringUtf8Name = varQual gHC_BASE (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
599 eqStringName = varQual gHC_BASE (fsLit "eqString") eqStringIdKey
600 stringTyConName = tcQual gHC_BASE (fsLit "String") stringTyConKey
602 -- The 'inline' function
604 inlineIdName = varQual gHC_MAGIC (fsLit "inline") inlineIdKey
606 -- Base classes (Eq, Ord, Functor)
607 eqClassName, eqName, ordClassName, geName, functorClassName :: Name
608 eqClassName = clsQual gHC_CLASSES (fsLit "Eq") eqClassKey
609 eqName = methName gHC_CLASSES (fsLit "==") eqClassOpKey
610 ordClassName = clsQual gHC_CLASSES (fsLit "Ord") ordClassKey
611 geName = methName gHC_CLASSES (fsLit ">=") geClassOpKey
612 functorClassName = clsQual gHC_BASE (fsLit "Functor") functorClassKey
615 monadClassName, thenMName, bindMName, returnMName, failMName :: Name
616 monadClassName = clsQual gHC_BASE (fsLit "Monad") monadClassKey
617 thenMName = methName gHC_BASE (fsLit ">>") thenMClassOpKey
618 bindMName = methName gHC_BASE (fsLit ">>=") bindMClassOpKey
619 returnMName = methName gHC_BASE (fsLit "return") returnMClassOpKey
620 failMName = methName gHC_BASE (fsLit "fail") failMClassOpKey
622 -- Classes (Applicative, Foldable, Traversable)
623 applicativeClassName, foldableClassName, traversableClassName :: Name
624 applicativeClassName = clsQual cONTROL_APPLICATIVE (fsLit "Applicative") applicativeClassKey
625 foldableClassName = clsQual dATA_FOLDABLE (fsLit "Foldable") foldableClassKey
626 traversableClassName = clsQual dATA_TRAVERSABLE (fsLit "Traversable") traversableClassKey
628 -- Functions for GHC extensions
629 groupWithName :: Name
630 groupWithName = varQual gHC_EXTS (fsLit "groupWith") groupWithIdKey
632 -- Random PrelBase functions
633 fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
634 mapName, appendName, assertName,
635 breakpointName, breakpointCondName, breakpointAutoName,
636 dollarName, opaqueTyConName :: Name
637 fromStringName = methName dATA_STRING (fsLit "fromString") fromStringClassOpKey
638 otherwiseIdName = varQual gHC_BASE (fsLit "otherwise") otherwiseIdKey
639 foldrName = varQual gHC_BASE (fsLit "foldr") foldrIdKey
640 buildName = varQual gHC_BASE (fsLit "build") buildIdKey
641 augmentName = varQual gHC_BASE (fsLit "augment") augmentIdKey
642 mapName = varQual gHC_BASE (fsLit "map") mapIdKey
643 appendName = varQual gHC_BASE (fsLit "++") appendIdKey
644 dollarName = varQual gHC_BASE (fsLit "$") dollarIdKey
645 assertName = varQual gHC_BASE (fsLit "assert") assertIdKey
646 breakpointName = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
647 breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
648 breakpointAutoName= varQual gHC_BASE (fsLit "breakpointAuto") breakpointAutoIdKey
649 opaqueTyConName = tcQual gHC_BASE (fsLit "Opaque") opaqueTyConKey
651 breakpointJumpName :: Name
655 (mkOccNameFS varName (fsLit "breakpointJump"))
657 breakpointCondJumpName :: Name
658 breakpointCondJumpName
660 breakpointCondJumpIdKey
661 (mkOccNameFS varName (fsLit "breakpointCondJump"))
663 breakpointAutoJumpName :: Name
664 breakpointAutoJumpName
666 breakpointAutoJumpIdKey
667 (mkOccNameFS varName (fsLit "breakpointAutoJump"))
671 fstName, sndName :: Name
672 fstName = varQual dATA_TUPLE (fsLit "fst") fstIdKey
673 sndName = varQual dATA_TUPLE (fsLit "snd") sndIdKey
676 numClassName, fromIntegerName, minusName, negateName, plusIntegerName,
678 integerTyConName, smallIntegerName :: Name
679 numClassName = clsQual gHC_NUM (fsLit "Num") numClassKey
680 fromIntegerName = methName gHC_NUM (fsLit "fromInteger") fromIntegerClassOpKey
681 minusName = methName gHC_NUM (fsLit "-") minusClassOpKey
682 negateName = methName gHC_NUM (fsLit "negate") negateClassOpKey
683 plusIntegerName = varQual gHC_INTEGER (fsLit "plusInteger") plusIntegerIdKey
684 timesIntegerName = varQual gHC_INTEGER (fsLit "timesInteger") timesIntegerIdKey
685 integerTyConName = tcQual gHC_INTEGER_TYPE (fsLit "Integer") integerTyConKey
686 smallIntegerName = varQual gHC_INTEGER (fsLit "smallInteger") smallIntegerIdKey
688 -- GHC.Real types and classes
689 rationalTyConName, ratioTyConName, ratioDataConName, realClassName,
690 integralClassName, realFracClassName, fractionalClassName,
691 fromRationalName, toIntegerName, toRationalName, fromIntegralName,
692 realToFracName :: Name
693 rationalTyConName = tcQual gHC_REAL (fsLit "Rational") rationalTyConKey
694 ratioTyConName = tcQual gHC_REAL (fsLit "Ratio") ratioTyConKey
695 ratioDataConName = conName gHC_REAL (fsLit ":%") ratioDataConKey
696 realClassName = clsQual gHC_REAL (fsLit "Real") realClassKey
697 integralClassName = clsQual gHC_REAL (fsLit "Integral") integralClassKey
698 realFracClassName = clsQual gHC_REAL (fsLit "RealFrac") realFracClassKey
699 fractionalClassName = clsQual gHC_REAL (fsLit "Fractional") fractionalClassKey
700 fromRationalName = methName gHC_REAL (fsLit "fromRational") fromRationalClassOpKey
701 toIntegerName = methName gHC_REAL (fsLit "toInteger") toIntegerClassOpKey
702 toRationalName = methName gHC_REAL (fsLit "toRational") toRationalClassOpKey
703 fromIntegralName = varQual gHC_REAL (fsLit "fromIntegral") fromIntegralIdKey
704 realToFracName = varQual gHC_REAL (fsLit "realToFrac") realToFracIdKey
707 floatingClassName, realFloatClassName :: Name
708 floatingClassName = clsQual gHC_FLOAT (fsLit "Floating") floatingClassKey
709 realFloatClassName = clsQual gHC_FLOAT (fsLit "RealFloat") realFloatClassKey
713 ixClassName = clsQual gHC_ARR (fsLit "Ix") ixClassKey
716 typeableClassName, typeable1ClassName, typeable2ClassName,
717 typeable3ClassName, typeable4ClassName, typeable5ClassName,
718 typeable6ClassName, typeable7ClassName :: Name
719 typeableClassName = clsQual tYPEABLE (fsLit "Typeable") typeableClassKey
720 typeable1ClassName = clsQual tYPEABLE (fsLit "Typeable1") typeable1ClassKey
721 typeable2ClassName = clsQual tYPEABLE (fsLit "Typeable2") typeable2ClassKey
722 typeable3ClassName = clsQual tYPEABLE (fsLit "Typeable3") typeable3ClassKey
723 typeable4ClassName = clsQual tYPEABLE (fsLit "Typeable4") typeable4ClassKey
724 typeable5ClassName = clsQual tYPEABLE (fsLit "Typeable5") typeable5ClassKey
725 typeable6ClassName = clsQual tYPEABLE (fsLit "Typeable6") typeable6ClassKey
726 typeable7ClassName = clsQual tYPEABLE (fsLit "Typeable7") typeable7ClassKey
728 typeableClassNames :: [Name]
729 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
730 , typeable3ClassName, typeable4ClassName, typeable5ClassName
731 , typeable6ClassName, typeable7ClassName ]
734 dataClassName :: Name
735 dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
738 assertErrorName :: Name
739 assertErrorName = varQual gHC_IO_Exception (fsLit "assertError") assertErrorIdKey
741 -- Enum module (Enum, Bounded)
742 enumClassName, enumFromName, enumFromToName, enumFromThenName,
743 enumFromThenToName, boundedClassName :: Name
744 enumClassName = clsQual gHC_ENUM (fsLit "Enum") enumClassKey
745 enumFromName = methName gHC_ENUM (fsLit "enumFrom") enumFromClassOpKey
746 enumFromToName = methName gHC_ENUM (fsLit "enumFromTo") enumFromToClassOpKey
747 enumFromThenName = methName gHC_ENUM (fsLit "enumFromThen") enumFromThenClassOpKey
748 enumFromThenToName = methName gHC_ENUM (fsLit "enumFromThenTo") enumFromThenToClassOpKey
749 boundedClassName = clsQual gHC_ENUM (fsLit "Bounded") boundedClassKey
752 concatName, filterName, zipName :: Name
753 concatName = varQual gHC_LIST (fsLit "concat") concatIdKey
754 filterName = varQual gHC_LIST (fsLit "filter") filterIdKey
755 zipName = varQual gHC_LIST (fsLit "zip") zipIdKey
758 showClassName :: Name
759 showClassName = clsQual gHC_SHOW (fsLit "Show") showClassKey
762 readClassName :: Name
763 readClassName = clsQual gHC_READ (fsLit "Read") readClassKey
765 -- parallel array types and functions
766 enumFromToPName, enumFromThenToPName, nullPName, lengthPName,
767 singletonPName, replicatePName, mapPName, filterPName,
768 zipPName, crossMapPName, indexPName, toPName,
769 emptyPName, appPName :: PackageId -> Name
770 enumFromToPName pkg = varQual (gHC_PARR pkg) (fsLit "enumFromToP") enumFromToPIdKey
771 enumFromThenToPName pkg = varQual (gHC_PARR pkg) (fsLit "enumFromThenToP") enumFromThenToPIdKey
772 nullPName pkg = varQual (gHC_PARR pkg) (fsLit "nullP") nullPIdKey
773 lengthPName pkg = varQual (gHC_PARR pkg) (fsLit "lengthP") lengthPIdKey
774 singletonPName pkg = varQual (gHC_PARR pkg) (fsLit "singletonP") singletonPIdKey
775 replicatePName pkg = varQual (gHC_PARR pkg) (fsLit "replicateP") replicatePIdKey
776 mapPName pkg = varQual (gHC_PARR pkg) (fsLit "mapP") mapPIdKey
777 filterPName pkg = varQual (gHC_PARR pkg) (fsLit "filterP") filterPIdKey
778 zipPName pkg = varQual (gHC_PARR pkg) (fsLit "zipP") zipPIdKey
779 crossMapPName pkg = varQual (gHC_PARR pkg) (fsLit "crossMapP") crossMapPIdKey
780 indexPName pkg = varQual (gHC_PARR pkg) (fsLit "!:") indexPIdKey
781 toPName pkg = varQual (gHC_PARR pkg) (fsLit "toP") toPIdKey
782 emptyPName pkg = varQual (gHC_PARR pkg) (fsLit "emptyP") emptyPIdKey
783 appPName pkg = varQual (gHC_PARR pkg) (fsLit "+:+") appPIdKey
786 hetmet_brak_name, hetmet_esc_name, hetmet_csp_name :: Name
787 hetmet_guest_integer_literal_name, hetmet_guest_string_literal_name, hetmet_guest_char_literal_name :: Name
788 hetmet_brak_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_brak") hetmet_brak_key
789 hetmet_esc_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_esc") hetmet_esc_key
790 hetmet_csp_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_csp") hetmet_csp_key
791 hetmet_guest_integer_literal_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_guest_integer_literal") hetmet_guest_integer_literal_key
792 hetmet_guest_string_literal_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_guest_string_literal") hetmet_guest_string_literal_key
793 hetmet_guest_char_literal_name = varQual gHC_HETMET_CODETYPES (fsLit "hetmet_guest_char_literal") hetmet_guest_char_literal_key
796 ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
798 ioTyConName = tcQual gHC_TYPES (fsLit "IO") ioTyConKey
799 ioDataConName = conName gHC_TYPES (fsLit "IO") ioDataConKey
800 thenIOName = varQual gHC_BASE (fsLit "thenIO") thenIOIdKey
801 bindIOName = varQual gHC_BASE (fsLit "bindIO") bindIOIdKey
802 returnIOName = varQual gHC_BASE (fsLit "returnIO") returnIOIdKey
803 failIOName = varQual gHC_IO (fsLit "failIO") failIOIdKey
807 printName = varQual sYSTEM_IO (fsLit "print") printIdKey
809 -- Int, Word, and Addr things
810 int8TyConName, int16TyConName, int32TyConName, int64TyConName :: Name
811 int8TyConName = tcQual gHC_INT (fsLit "Int8") int8TyConKey
812 int16TyConName = tcQual gHC_INT (fsLit "Int16") int16TyConKey
813 int32TyConName = tcQual gHC_INT (fsLit "Int32") int32TyConKey
814 int64TyConName = tcQual gHC_INT (fsLit "Int64") int64TyConKey
817 word8TyConName, word16TyConName, word32TyConName, word64TyConName,
818 wordTyConName, wordDataConName :: Name
819 word8TyConName = tcQual gHC_WORD (fsLit "Word8") word8TyConKey
820 word16TyConName = tcQual gHC_WORD (fsLit "Word16") word16TyConKey
821 word32TyConName = tcQual gHC_WORD (fsLit "Word32") word32TyConKey
822 word64TyConName = tcQual gHC_WORD (fsLit "Word64") word64TyConKey
823 wordTyConName = tcQual gHC_WORD (fsLit "Word") wordTyConKey
824 wordDataConName = conName gHC_WORD (fsLit "W#") wordDataConKey
827 ptrTyConName, funPtrTyConName :: Name
828 ptrTyConName = tcQual gHC_PTR (fsLit "Ptr") ptrTyConKey
829 funPtrTyConName = tcQual gHC_PTR (fsLit "FunPtr") funPtrTyConKey
831 -- Foreign objects and weak pointers
832 stablePtrTyConName, newStablePtrName :: Name
833 stablePtrTyConName = tcQual gHC_STABLE (fsLit "StablePtr") stablePtrTyConKey
834 newStablePtrName = varQual gHC_STABLE (fsLit "newStablePtr") newStablePtrIdKey
838 runSTRepName = varQual gHC_ST (fsLit "runSTRep") runSTRepIdKey
840 -- Recursive-do notation
841 monadFixClassName, mfixName :: Name
842 monadFixClassName = clsQual mONAD_FIX (fsLit "MonadFix") monadFixClassKey
843 mfixName = methName mONAD_FIX (fsLit "mfix") mfixIdKey
846 arrAName, composeAName, firstAName, appAName, choiceAName, loopAName :: Name
847 arrAName = varQual aRROW (fsLit "arr") arrAIdKey
848 composeAName = varQual gHC_DESUGAR (fsLit ">>>") composeAIdKey
849 firstAName = varQual aRROW (fsLit "first") firstAIdKey
850 appAName = varQual aRROW (fsLit "app") appAIdKey
851 choiceAName = varQual aRROW (fsLit "|||") choiceAIdKey
852 loopAName = varQual aRROW (fsLit "loop") loopAIdKey
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 -- Heterogeneous Metaprogramming code type constructor
1107 hetMetCodeTypeTyConKey :: Unique
1108 hetMetCodeTypeTyConKey = mkPreludeTyConUnique 135
1110 ---------------- Template Haskell -------------------
1111 -- USES TyConUniques 100-129
1112 -----------------------------------------------------
1114 unitTyConKey :: Unique
1115 unitTyConKey = mkTupleTyConUnique Boxed 0
1118 %************************************************************************
1120 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1122 %************************************************************************
1125 charDataConKey, consDataConKey, doubleDataConKey, falseDataConKey,
1126 floatDataConKey, intDataConKey, nilDataConKey, ratioDataConKey,
1127 stableNameDataConKey, trueDataConKey, wordDataConKey,
1128 ioDataConKey, integerDataConKey :: Unique
1129 charDataConKey = mkPreludeDataConUnique 1
1130 consDataConKey = mkPreludeDataConUnique 2
1131 doubleDataConKey = mkPreludeDataConUnique 3
1132 falseDataConKey = mkPreludeDataConUnique 4
1133 floatDataConKey = mkPreludeDataConUnique 5
1134 intDataConKey = mkPreludeDataConUnique 6
1135 nilDataConKey = mkPreludeDataConUnique 11
1136 ratioDataConKey = mkPreludeDataConUnique 12
1137 stableNameDataConKey = mkPreludeDataConUnique 14
1138 trueDataConKey = mkPreludeDataConUnique 15
1139 wordDataConKey = mkPreludeDataConUnique 16
1140 ioDataConKey = mkPreludeDataConUnique 17
1141 integerDataConKey = mkPreludeDataConUnique 18
1143 -- Generic data constructors
1144 crossDataConKey, inlDataConKey, inrDataConKey, genUnitDataConKey :: Unique
1145 crossDataConKey = mkPreludeDataConUnique 20
1146 inlDataConKey = mkPreludeDataConUnique 21
1147 inrDataConKey = mkPreludeDataConUnique 22
1148 genUnitDataConKey = mkPreludeDataConUnique 23
1150 -- Data constructor for parallel arrays
1151 parrDataConKey :: Unique
1152 parrDataConKey = mkPreludeDataConUnique 24
1154 leftDataConKey, rightDataConKey :: Unique
1155 leftDataConKey = mkPreludeDataConUnique 25
1156 rightDataConKey = mkPreludeDataConUnique 26
1158 -- Data constructor for Heterogeneous Metaprogramming code types
1159 hetMetCodeTypeDataConKey :: Unique
1160 hetMetCodeTypeDataConKey = mkPreludeDataConUnique 27
1163 %************************************************************************
1165 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1167 %************************************************************************
1170 absentErrorIdKey, augmentIdKey, appendIdKey, buildIdKey, errorIdKey,
1171 foldlIdKey, foldrIdKey, recSelErrorIdKey,
1172 integerMinusOneIdKey, integerPlusOneIdKey,
1173 integerPlusTwoIdKey, integerZeroIdKey,
1174 int2IntegerIdKey, seqIdKey, irrefutPatErrorIdKey, eqStringIdKey,
1175 noMethodBindingErrorIdKey, nonExhaustiveGuardsErrorIdKey,
1176 runtimeErrorIdKey, parErrorIdKey, parIdKey, patErrorIdKey,
1177 realWorldPrimIdKey, recConErrorIdKey, recUpdErrorIdKey,
1178 traceIdKey, wildCardKey,
1179 unpackCStringUtf8IdKey, unpackCStringAppendIdKey,
1180 unpackCStringFoldrIdKey, unpackCStringIdKey :: Unique
1181 wildCardKey = mkPreludeMiscIdUnique 0 -- See Note [WildCard]
1182 absentErrorIdKey = mkPreludeMiscIdUnique 1
1183 augmentIdKey = mkPreludeMiscIdUnique 3
1184 appendIdKey = mkPreludeMiscIdUnique 4
1185 buildIdKey = mkPreludeMiscIdUnique 5
1186 errorIdKey = mkPreludeMiscIdUnique 6
1187 foldlIdKey = mkPreludeMiscIdUnique 7
1188 foldrIdKey = mkPreludeMiscIdUnique 8
1189 recSelErrorIdKey = mkPreludeMiscIdUnique 9
1190 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
1191 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
1192 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
1193 integerZeroIdKey = mkPreludeMiscIdUnique 13
1194 int2IntegerIdKey = mkPreludeMiscIdUnique 14
1195 seqIdKey = mkPreludeMiscIdUnique 15
1196 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
1197 eqStringIdKey = mkPreludeMiscIdUnique 17
1198 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
1199 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1200 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
1201 parErrorIdKey = mkPreludeMiscIdUnique 21
1202 parIdKey = mkPreludeMiscIdUnique 22
1203 patErrorIdKey = mkPreludeMiscIdUnique 23
1204 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
1205 recConErrorIdKey = mkPreludeMiscIdUnique 25
1206 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
1207 traceIdKey = mkPreludeMiscIdUnique 27
1208 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
1209 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
1210 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
1211 unpackCStringIdKey = mkPreludeMiscIdUnique 31
1213 unsafeCoerceIdKey, concatIdKey, filterIdKey, zipIdKey, bindIOIdKey,
1214 returnIOIdKey, deRefStablePtrIdKey, newStablePtrIdKey,
1215 smallIntegerIdKey, plusIntegerIdKey, timesIntegerIdKey,
1216 printIdKey, failIOIdKey, nullAddrIdKey, voidArgIdKey,
1217 fstIdKey, sndIdKey, otherwiseIdKey, assertIdKey, runSTRepIdKey :: Unique
1218 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
1219 concatIdKey = mkPreludeMiscIdUnique 33
1220 filterIdKey = mkPreludeMiscIdUnique 34
1221 zipIdKey = mkPreludeMiscIdUnique 35
1222 bindIOIdKey = mkPreludeMiscIdUnique 36
1223 returnIOIdKey = mkPreludeMiscIdUnique 37
1224 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
1225 newStablePtrIdKey = mkPreludeMiscIdUnique 39
1226 smallIntegerIdKey = mkPreludeMiscIdUnique 40
1227 plusIntegerIdKey = mkPreludeMiscIdUnique 41
1228 timesIntegerIdKey = mkPreludeMiscIdUnique 42
1229 printIdKey = mkPreludeMiscIdUnique 43
1230 failIOIdKey = mkPreludeMiscIdUnique 44
1231 nullAddrIdKey = mkPreludeMiscIdUnique 46
1232 voidArgIdKey = mkPreludeMiscIdUnique 47
1233 fstIdKey = mkPreludeMiscIdUnique 49
1234 sndIdKey = mkPreludeMiscIdUnique 50
1235 otherwiseIdKey = mkPreludeMiscIdUnique 51
1236 assertIdKey = mkPreludeMiscIdUnique 53
1237 runSTRepIdKey = mkPreludeMiscIdUnique 54
1239 rootMainKey, runMainKey :: Unique
1240 rootMainKey = mkPreludeMiscIdUnique 55
1241 runMainKey = mkPreludeMiscIdUnique 56
1243 thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
1244 thenIOIdKey = mkPreludeMiscIdUnique 59
1245 lazyIdKey = mkPreludeMiscIdUnique 60
1246 assertErrorIdKey = mkPreludeMiscIdUnique 61
1248 breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
1249 breakpointJumpIdKey, breakpointCondJumpIdKey,
1250 breakpointAutoJumpIdKey :: Unique
1251 breakpointIdKey = mkPreludeMiscIdUnique 62
1252 breakpointCondIdKey = mkPreludeMiscIdUnique 63
1253 breakpointAutoIdKey = mkPreludeMiscIdUnique 64
1254 breakpointJumpIdKey = mkPreludeMiscIdUnique 65
1255 breakpointCondJumpIdKey = mkPreludeMiscIdUnique 66
1256 breakpointAutoJumpIdKey = mkPreludeMiscIdUnique 67
1258 inlineIdKey :: Unique
1259 inlineIdKey = mkPreludeMiscIdUnique 68
1261 mapIdKey, groupWithIdKey, dollarIdKey :: Unique
1262 mapIdKey = mkPreludeMiscIdUnique 69
1263 groupWithIdKey = mkPreludeMiscIdUnique 70
1264 dollarIdKey = mkPreludeMiscIdUnique 71
1266 -- Parallel array functions
1267 singletonPIdKey, nullPIdKey, lengthPIdKey, replicatePIdKey, mapPIdKey,
1268 filterPIdKey, zipPIdKey, crossMapPIdKey, indexPIdKey, toPIdKey,
1269 enumFromToPIdKey, enumFromThenToPIdKey, emptyPIdKey, appPIdKey :: Unique
1270 singletonPIdKey = mkPreludeMiscIdUnique 79
1271 nullPIdKey = mkPreludeMiscIdUnique 80
1272 lengthPIdKey = mkPreludeMiscIdUnique 81
1273 replicatePIdKey = mkPreludeMiscIdUnique 82
1274 mapPIdKey = mkPreludeMiscIdUnique 83
1275 filterPIdKey = mkPreludeMiscIdUnique 84
1276 zipPIdKey = mkPreludeMiscIdUnique 85
1277 crossMapPIdKey = mkPreludeMiscIdUnique 86
1278 indexPIdKey = mkPreludeMiscIdUnique 87
1279 toPIdKey = mkPreludeMiscIdUnique 88
1280 enumFromToPIdKey = mkPreludeMiscIdUnique 89
1281 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
1282 emptyPIdKey = mkPreludeMiscIdUnique 91
1283 appPIdKey = mkPreludeMiscIdUnique 92
1286 unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
1287 unmarshalStringIdKey, checkDotnetResNameIdKey :: Unique
1288 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
1289 marshalObjectIdKey = mkPreludeMiscIdUnique 95
1290 marshalStringIdKey = mkPreludeMiscIdUnique 96
1291 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
1292 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
1296 Certain class operations from Prelude classes. They get their own
1297 uniques so we can look them up easily when we want to conjure them up
1298 during type checking.
1301 -- Just a place holder for unbound variables produced by the renamer:
1302 unboundKey :: Unique
1303 unboundKey = mkPreludeMiscIdUnique 101
1305 fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
1306 enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
1307 enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
1308 failMClassOpKey, bindMClassOpKey, thenMClassOpKey, returnMClassOpKey
1310 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
1311 minusClassOpKey = mkPreludeMiscIdUnique 103
1312 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
1313 enumFromClassOpKey = mkPreludeMiscIdUnique 105
1314 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
1315 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
1316 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
1317 eqClassOpKey = mkPreludeMiscIdUnique 109
1318 geClassOpKey = mkPreludeMiscIdUnique 110
1319 negateClassOpKey = mkPreludeMiscIdUnique 111
1320 failMClassOpKey = mkPreludeMiscIdUnique 112
1321 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
1322 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
1323 returnMClassOpKey = mkPreludeMiscIdUnique 117
1325 -- Recursive do notation
1327 mfixIdKey = mkPreludeMiscIdUnique 118
1330 arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
1331 loopAIdKey :: Unique
1332 arrAIdKey = mkPreludeMiscIdUnique 119
1333 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
1334 firstAIdKey = mkPreludeMiscIdUnique 121
1335 appAIdKey = mkPreludeMiscIdUnique 122
1336 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
1337 loopAIdKey = mkPreludeMiscIdUnique 124
1339 fromStringClassOpKey :: Unique
1340 fromStringClassOpKey = mkPreludeMiscIdUnique 125
1342 -- Annotation type checking
1343 toAnnotationWrapperIdKey :: Unique
1344 toAnnotationWrapperIdKey = mkPreludeMiscIdUnique 126
1346 -- Conversion functions
1347 fromIntegralIdKey, realToFracIdKey, toIntegerClassOpKey, toRationalClassOpKey :: Unique
1348 fromIntegralIdKey = mkPreludeMiscIdUnique 127
1349 realToFracIdKey = mkPreludeMiscIdUnique 128
1350 toIntegerClassOpKey = mkPreludeMiscIdUnique 129
1351 toRationalClassOpKey = mkPreludeMiscIdUnique 130
1354 hetmet_brak_key, hetmet_esc_key, hetmet_csp_key :: Unique
1355 hetmet_brak_key = mkPreludeMiscIdUnique 131
1356 hetmet_esc_key = mkPreludeMiscIdUnique 132
1357 hetmet_csp_key = mkPreludeMiscIdUnique 133
1358 hetmet_guest_integer_literal_key, hetmet_guest_string_literal_key, hetmet_guest_char_literal_key :: Unique
1359 hetmet_guest_integer_literal_key = mkPreludeMiscIdUnique 134
1360 hetmet_guest_string_literal_key = mkPreludeMiscIdUnique 135
1361 hetmet_guest_char_literal_key = mkPreludeMiscIdUnique 136
1363 ---------------- Template Haskell -------------------
1364 -- USES IdUniques 200-399
1365 -----------------------------------------------------
1369 %************************************************************************
1371 \subsection{Standard groups of types}
1373 %************************************************************************
1376 numericTyKeys :: [Unique]
1385 kindKeys :: [Unique]
1386 kindKeys = [ liftedTypeKindTyConKey
1387 , openTypeKindTyConKey
1388 , unliftedTypeKindTyConKey
1389 , ubxTupleKindTyConKey
1390 , argTypeKindTyConKey ]
1394 %************************************************************************
1396 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1398 %************************************************************************
1400 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1401 even though every numeric class has these two as a superclass,
1402 because the list of ambiguous dictionaries hasn't been simplified.
1405 numericClassKeys :: [Unique]
1411 ++ fractionalClassKeys
1413 fractionalClassKeys :: [Unique]
1414 fractionalClassKeys =
1415 [ fractionalClassKey
1421 -- the strictness analyser needs to know about numeric types
1422 -- (see SaAbsInt.lhs)
1423 needsDataDeclCtxtClassKeys :: [Unique]
1424 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1428 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1429 -- and are: "classes defined in the Prelude or a standard library"
1430 standardClassKeys :: [Unique]
1431 standardClassKeys = derivableClassKeys ++ numericClassKeys
1432 ++ [randomClassKey, randomGenClassKey,
1434 monadClassKey, monadPlusClassKey,
1436 applicativeClassKey, foldableClassKey, traversableClassKey
1440 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1444 derivableClassKeys :: [Unique]
1446 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1447 boundedClassKey, showClassKey, readClassKey ]