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"
52 import Module ( Module, mkBasePkgModule, mkHomeModule, mkModuleName )
53 import OccName ( dataName, tcName, clsName, varName, mkOccFS
56 import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc )
57 import Unique ( Unique, Uniquable(..), hasKey,
58 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
59 mkPreludeTyConUnique, mkPreludeClassUnique,
60 mkTupleTyConUnique, isTupleKey
62 import BasicTypes ( Boxity(..), Arity )
63 import Name ( Name, mkInternalName, mkExternalName, nameUnique, nameModule )
64 import SrcLoc ( noSrcLoc )
71 %************************************************************************
73 \subsection{Local Names}
75 %************************************************************************
77 This *local* name is used by the interactive stuff
80 itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
84 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
85 -- during compiler debugging.
86 mkUnboundName :: RdrName -> Name
87 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
89 isUnboundName :: Name -> Bool
90 isUnboundName name = name `hasKey` unboundKey
94 %************************************************************************
96 \subsection{Built-in-syntax names
98 %************************************************************************
100 Built-in syntax names are parsed directly into Exact RdrNames.
101 This predicate just identifies them.
104 isBuiltInSyntaxName :: Name -> Bool
105 isBuiltInSyntaxName n
107 || uniq `elem` [listTyConKey, nilDataConKey, consDataConKey,
108 funTyConKey, parrTyConKey]
113 %************************************************************************
115 \subsection{Known key Names}
117 %************************************************************************
119 This section tells what the compiler knows about the assocation of
120 names with uniques. These ones are the *non* wired-in ones. The
121 wired in ones are defined in TysWiredIn etc.
124 basicKnownKeyNames :: [Name]
128 ++ [ -- Type constructors (synonyms especially)
129 ioTyConName, ioDataConName,
136 mutableByteArrayTyConName,
137 integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
139 -- Classes. *Must* include:
140 -- classes that are grabbed by key (e.g., eqClassKey)
141 -- classes in "Class.standardClassKeys" (quite a few)
142 eqClassName, -- mentioned, derivable
143 ordClassName, -- derivable
144 boundedClassName, -- derivable
145 numClassName, -- mentioned, numeric
146 enumClassName, -- derivable
149 realClassName, -- numeric
150 integralClassName, -- numeric
151 fractionalClassName, -- numeric
152 floatingClassName, -- numeric
153 realFracClassName, -- numeric
154 realFloatClassName, -- numeric
159 negateName, minusName,
160 fromRationalName, fromIntegerName,
164 enumFromName, enumFromThenName,
165 enumFromThenToName, enumFromToName,
166 enumFromToPName, enumFromThenToPName,
169 thenIOName, bindIOName, returnIOName, failIOName,
175 arrAName, composeAName, firstAName,
176 appAName, choiceAName, loopAName,
191 unpackCStringName, unpackCStringAppendName,
192 unpackCStringFoldrName, unpackCStringUtf8Name,
195 concatName, filterName,
196 zipName, foldrName, buildName, augmentName, appendName,
198 -- Parallel array operations
199 nullPName, lengthPName, replicatePName, mapPName,
200 filterPName, zipPName, crossPName, indexPName,
201 toPName, bpermutePName, bpermuteDftPName, indexOfPName,
203 -- FFI primitive types that are not wired-in.
204 stablePtrTyConName, ptrTyConName, funPtrTyConName, addrTyConName,
205 int8TyConName, int16TyConName, int32TyConName, int64TyConName,
206 wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
210 plusIntegerName, timesIntegerName,
211 eqStringName, assertName, runSTRepName,
212 printName, splitName, fstName, sndName,
218 , eitherTyConName, leftDataConName, rightDataConName
221 , objectTyConName, marshalObjectName, unmarshalObjectName
222 , marshalStringName, unmarshalStringName, checkDotnetResName
225 monadNames :: [Name] -- The monad ops need by a HsDo
226 monadNames = [returnMName, failMName, bindMName, thenMName]
228 genericTyConNames :: [Name]
229 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
233 %************************************************************************
235 \subsection{Module names}
237 %************************************************************************
240 --MetaHaskell Extension Add a new module here
242 pRELUDE_Name = mkModuleName "Prelude"
243 gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values
244 pREL_BASE_Name = mkModuleName "GHC.Base"
245 pREL_ENUM_Name = mkModuleName "GHC.Enum"
246 pREL_SHOW_Name = mkModuleName "GHC.Show"
247 pREL_READ_Name = mkModuleName "GHC.Read"
248 pREL_NUM_Name = mkModuleName "GHC.Num"
249 pREL_LIST_Name = mkModuleName "GHC.List"
250 pREL_PARR_Name = mkModuleName "GHC.PArr"
251 pREL_TUP_Name = mkModuleName "Data.Tuple"
252 pREL_EITHER_Name = mkModuleName "Data.Either"
253 pREL_PACK_Name = mkModuleName "GHC.Pack"
254 pREL_CONC_Name = mkModuleName "GHC.Conc"
255 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
256 pREL_ST_Name = mkModuleName "GHC.ST"
257 pREL_ARR_Name = mkModuleName "GHC.Arr"
258 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
259 pREL_STABLE_Name = mkModuleName "GHC.Stable"
260 pREL_ADDR_Name = mkModuleName "GHC.Addr"
261 pREL_PTR_Name = mkModuleName "GHC.Ptr"
262 pREL_ERR_Name = mkModuleName "GHC.Err"
263 pREL_REAL_Name = mkModuleName "GHC.Real"
264 pREL_FLOAT_Name = mkModuleName "GHC.Float"
265 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
266 sYSTEM_IO_Name = mkModuleName "System.IO"
267 dYNAMIC_Name = mkModuleName "Data.Dynamic"
268 tYPEABLE_Name = mkModuleName "Data.Typeable"
269 gENERICS_Name = mkModuleName "Data.Generics.Basics"
270 dOTNET_Name = mkModuleName "GHC.Dotnet"
272 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
273 lEX_Name = mkModuleName "Text.Read.Lex"
275 mAIN_Name = mkModuleName "Main"
276 pREL_INT_Name = mkModuleName "GHC.Int"
277 pREL_WORD_Name = mkModuleName "GHC.Word"
278 mONAD_FIX_Name = mkModuleName "Control.Monad.Fix"
279 aRROW_Name = mkModuleName "Control.Arrow"
280 aDDR_Name = mkModuleName "Addr"
282 gLA_EXTS_Name = mkModuleName "GHC.Exts"
284 gHC_PRIM = mkBasePkgModule gHC_PRIM_Name
285 pREL_BASE = mkBasePkgModule pREL_BASE_Name
286 pREL_TUP = mkBasePkgModule pREL_TUP_Name
287 pREL_EITHER = mkBasePkgModule pREL_EITHER_Name
288 pREL_LIST = mkBasePkgModule pREL_LIST_Name
289 pREL_SHOW = mkBasePkgModule pREL_SHOW_Name
290 pREL_READ = mkBasePkgModule pREL_READ_Name
291 pREL_ADDR = mkBasePkgModule pREL_ADDR_Name
292 pREL_WORD = mkBasePkgModule pREL_WORD_Name
293 pREL_INT = mkBasePkgModule pREL_INT_Name
294 pREL_PTR = mkBasePkgModule pREL_PTR_Name
295 pREL_ST = mkBasePkgModule pREL_ST_Name
296 pREL_STABLE = mkBasePkgModule pREL_STABLE_Name
297 pREL_IO_BASE = mkBasePkgModule pREL_IO_BASE_Name
298 pREL_PACK = mkBasePkgModule pREL_PACK_Name
299 pREL_ERR = mkBasePkgModule pREL_ERR_Name
300 pREL_NUM = mkBasePkgModule pREL_NUM_Name
301 pREL_ENUM = mkBasePkgModule pREL_ENUM_Name
302 pREL_REAL = mkBasePkgModule pREL_REAL_Name
303 pREL_FLOAT = mkBasePkgModule pREL_FLOAT_Name
304 pREL_ARR = mkBasePkgModule pREL_ARR_Name
305 pREL_PARR = mkBasePkgModule pREL_PARR_Name
306 pREL_BYTEARR = mkBasePkgModule pREL_BYTEARR_Name
307 pREL_TOP_HANDLER= mkBasePkgModule pREL_TOP_HANDLER_Name
308 pRELUDE = mkBasePkgModule pRELUDE_Name
309 sYSTEM_IO = mkBasePkgModule sYSTEM_IO_Name
310 aDDR = mkBasePkgModule aDDR_Name
311 aRROW = mkBasePkgModule aRROW_Name
312 gENERICS = mkBasePkgModule gENERICS_Name
313 tYPEABLE = mkBasePkgModule tYPEABLE_Name
314 dOTNET = mkBasePkgModule dOTNET_Name
315 gLA_EXTS = mkBasePkgModule gLA_EXTS_Name
316 mONAD_FIX = mkBasePkgModule mONAD_FIX_Name
318 -- MetaHaskell Extension text2 from Meta/work/gen.hs
319 mETA_META_Name = mkModuleName "Language.Haskell.THSyntax"
321 rOOT_MAIN_Name = mkModuleName ":Main" -- Root module for initialisation
322 rOOT_MAIN = mkHomeModule rOOT_MAIN_Name
323 -- The ':xxx' makes a moudle name that the user can never
324 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
325 -- module name still starts with a capital letter, which keeps
326 -- the z-encoded version consistent.
327 iNTERACTIVE = mkHomeModule (mkModuleName ":Interactive")
330 %************************************************************************
332 \subsection{Constructing the names of tuples
334 %************************************************************************
337 mkTupleModule :: Boxity -> Arity -> Module
338 mkTupleModule Boxed 0 = pREL_BASE
339 mkTupleModule Boxed _ = pREL_TUP
340 mkTupleModule Unboxed _ = gHC_PRIM
344 %************************************************************************
348 %************************************************************************
351 eq_RDR = nameRdrName eqName
352 ge_RDR = nameRdrName geName
353 ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=")
354 le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=")
355 gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">")
356 compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare")
357 ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT")
358 eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
359 gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT")
361 eqClass_RDR = nameRdrName eqClassName
362 numClass_RDR = nameRdrName numClassName
363 ordClass_RDR = nameRdrName ordClassName
364 enumClass_RDR = nameRdrName enumClassName
365 monadClass_RDR = nameRdrName monadClassName
367 map_RDR = varQual_RDR pREL_BASE_Name FSLIT("map")
368 append_RDR = varQual_RDR pREL_BASE_Name FSLIT("++")
370 foldr_RDR = nameRdrName foldrName
371 build_RDR = nameRdrName buildName
372 returnM_RDR = nameRdrName returnMName
373 bindM_RDR = nameRdrName bindMName
374 failM_RDR = nameRdrName failMName
376 and_RDR = nameRdrName andName
378 left_RDR = nameRdrName leftDataConName
379 right_RDR = nameRdrName rightDataConName
381 fromEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("fromEnum")
382 toEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("toEnum")
384 enumFrom_RDR = nameRdrName enumFromName
385 enumFromTo_RDR = nameRdrName enumFromToName
386 enumFromThen_RDR = nameRdrName enumFromThenName
387 enumFromThenTo_RDR = nameRdrName enumFromThenToName
389 ratioDataCon_RDR = nameRdrName ratioDataConName
390 plusInteger_RDR = nameRdrName plusIntegerName
391 timesInteger_RDR = nameRdrName timesIntegerName
393 ioDataCon_RDR = nameRdrName ioDataConName
395 eqString_RDR = nameRdrName eqStringName
396 unpackCString_RDR = nameRdrName unpackCStringName
397 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
398 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
400 newStablePtr_RDR = nameRdrName newStablePtrName
401 addrDataCon_RDR = dataQual_RDR aDDR_Name FSLIT("A#")
402 wordDataCon_RDR = dataQual_RDR pREL_WORD_Name FSLIT("W#")
404 bindIO_RDR = nameRdrName bindIOName
405 returnIO_RDR = nameRdrName returnIOName
407 fromInteger_RDR = nameRdrName fromIntegerName
408 fromRational_RDR = nameRdrName fromRationalName
409 minus_RDR = nameRdrName minusName
410 times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*")
411 plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+")
413 compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".")
415 not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not")
416 getTag_RDR = varQual_RDR pREL_BASE_Name FSLIT("getTag")
417 succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ")
418 pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred")
419 minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
420 maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
421 range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range")
422 inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange")
423 index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index")
425 readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList")
426 readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault")
427 readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec")
428 readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault")
429 readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec")
430 parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens")
431 choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose")
432 lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP")
434 punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc")
435 ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident")
436 symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol")
438 step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step")
439 alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++")
440 reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset")
441 prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec")
443 showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList")
444 showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
445 showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
446 showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString")
447 showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace")
448 showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen")
450 typeOf_RDR = varQual_RDR tYPEABLE_Name FSLIT("typeOf")
451 mkTypeRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkAppTy")
452 mkTyConRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkTyCon")
454 undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined")
456 crossDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT(":*:")
457 inlDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inl")
458 inrDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inr")
459 genUnitDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Unit")
461 ----------------------
462 varQual_RDR mod str = mkOrig mod (mkOccFS varName str)
463 tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str)
464 clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str)
465 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
468 %************************************************************************
470 \subsection{Known-key names}
472 %************************************************************************
474 Many of these Names are not really "built in", but some parts of the
475 compiler (notably the deriving mechanism) need to mention their names,
476 and it's convenient to write them all down in one place.
478 --MetaHaskell Extension add the constrs and the lower case case
479 -- guys as well (perhaps) e.g. see trueDataConName below
483 rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
484 runIOName = varQual pREL_TOP_HANDLER FSLIT("runIO") runMainKey
486 orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
488 eitherTyConName = tcQual pREL_EITHER FSLIT("Either") eitherTyConKey
489 leftDataConName = conName eitherTyConName FSLIT("Left") leftDataConKey
490 rightDataConName = conName eitherTyConName FSLIT("Right") rightDataConKey
493 crossTyConName = tcQual pREL_BASE FSLIT(":*:") crossTyConKey
494 plusTyConName = tcQual pREL_BASE FSLIT(":+:") plusTyConKey
495 genUnitTyConName = tcQual pREL_BASE FSLIT("Unit") genUnitTyConKey
497 -- Base strings Strings
498 unpackCStringName = varQual pREL_BASE FSLIT("unpackCString#") unpackCStringIdKey
499 unpackCStringAppendName = varQual pREL_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
500 unpackCStringFoldrName = varQual pREL_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
501 unpackCStringUtf8Name = varQual pREL_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
502 eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey
504 -- Base classes (Eq, Ord, Functor)
505 eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
506 eqName = methName eqClassName FSLIT("==") eqClassOpKey
507 ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
508 geName = methName ordClassName FSLIT(">=") geClassOpKey
509 functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey
512 monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
513 thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
514 bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
515 returnMName = methName monadClassName FSLIT("return") returnMClassOpKey
516 failMName = methName monadClassName FSLIT("fail") failMClassOpKey
518 -- Random PrelBase functions
519 otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey
520 foldrName = varQual pREL_BASE FSLIT("foldr") foldrIdKey
521 buildName = varQual pREL_BASE FSLIT("build") buildIdKey
522 augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey
523 appendName = varQual pREL_BASE FSLIT("++") appendIdKey
524 andName = varQual pREL_BASE FSLIT("&&") andIdKey
525 orName = varQual pREL_BASE FSLIT("||") orIdKey
526 assertName = varQual pREL_BASE FSLIT("assert") assertIdKey
529 fstName = varQual pREL_TUP FSLIT("fst") fstIdKey
530 sndName = varQual pREL_TUP FSLIT("snd") sndIdKey
533 numClassName = clsQual pREL_NUM FSLIT("Num") numClassKey
534 fromIntegerName = methName numClassName FSLIT("fromInteger") fromIntegerClassOpKey
535 minusName = methName numClassName FSLIT("-") minusClassOpKey
536 negateName = methName numClassName FSLIT("negate") negateClassOpKey
537 plusIntegerName = varQual pREL_NUM FSLIT("plusInteger") plusIntegerIdKey
538 timesIntegerName = varQual pREL_NUM FSLIT("timesInteger") timesIntegerIdKey
539 integerTyConName = tcQual pREL_NUM FSLIT("Integer") integerTyConKey
540 smallIntegerDataConName = conName integerTyConName FSLIT("S#") smallIntegerDataConKey
541 largeIntegerDataConName = conName integerTyConName FSLIT("J#") largeIntegerDataConKey
543 -- PrelReal types and classes
544 rationalTyConName = tcQual pREL_REAL FSLIT("Rational") rationalTyConKey
545 ratioTyConName = tcQual pREL_REAL FSLIT("Ratio") ratioTyConKey
546 ratioDataConName = conName ratioTyConName FSLIT(":%") ratioDataConKey
547 realClassName = clsQual pREL_REAL FSLIT("Real") realClassKey
548 integralClassName = clsQual pREL_REAL FSLIT("Integral") integralClassKey
549 realFracClassName = clsQual pREL_REAL FSLIT("RealFrac") realFracClassKey
550 fractionalClassName = clsQual pREL_REAL FSLIT("Fractional") fractionalClassKey
551 fromRationalName = methName fractionalClassName FSLIT("fromRational") fromRationalClassOpKey
554 floatingClassName = clsQual pREL_FLOAT FSLIT("Floating") floatingClassKey
555 realFloatClassName = clsQual pREL_FLOAT FSLIT("RealFloat") realFloatClassKey
558 ixClassName = clsQual pREL_ARR FSLIT("Ix") ixClassKey
560 -- Class Typeable and Data
561 typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
562 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
565 assertErrorName = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey
567 -- Enum module (Enum, Bounded)
568 enumClassName = clsQual pREL_ENUM FSLIT("Enum") enumClassKey
569 enumFromName = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey
570 enumFromToName = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey
571 enumFromThenName = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey
572 enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey
573 boundedClassName = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey
576 concatName = varQual pREL_LIST FSLIT("concat") concatIdKey
577 filterName = varQual pREL_LIST FSLIT("filter") filterIdKey
578 zipName = varQual pREL_LIST FSLIT("zip") zipIdKey
581 showClassName = clsQual pREL_SHOW FSLIT("Show") showClassKey
584 readClassName = clsQual pREL_READ FSLIT("Read") readClassKey
586 -- parallel array types and functions
587 enumFromToPName = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey
588 enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
589 nullPName = varQual pREL_PARR FSLIT("nullP") nullPIdKey
590 lengthPName = varQual pREL_PARR FSLIT("lengthP") lengthPIdKey
591 replicatePName = varQual pREL_PARR FSLIT("replicateP") replicatePIdKey
592 mapPName = varQual pREL_PARR FSLIT("mapP") mapPIdKey
593 filterPName = varQual pREL_PARR FSLIT("filterP") filterPIdKey
594 zipPName = varQual pREL_PARR FSLIT("zipP") zipPIdKey
595 crossPName = varQual pREL_PARR FSLIT("crossP") crossPIdKey
596 indexPName = varQual pREL_PARR FSLIT("!:") indexPIdKey
597 toPName = varQual pREL_PARR FSLIT("toP") toPIdKey
598 bpermutePName = varQual pREL_PARR FSLIT("bpermuteP") bpermutePIdKey
599 bpermuteDftPName = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
600 indexOfPName = varQual pREL_PARR FSLIT("indexOfP") indexOfPIdKey
603 ioTyConName = tcQual pREL_IO_BASE FSLIT("IO") ioTyConKey
604 ioDataConName = conName ioTyConName FSLIT("IO") ioDataConKey
605 thenIOName = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey
606 bindIOName = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey
607 returnIOName = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey
608 failIOName = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey
611 printName = varQual sYSTEM_IO FSLIT("print") printIdKey
613 -- Int, Word, and Addr things
614 int8TyConName = tcQual pREL_INT FSLIT("Int8") int8TyConKey
615 int16TyConName = tcQual pREL_INT FSLIT("Int16") int16TyConKey
616 int32TyConName = tcQual pREL_INT FSLIT("Int32") int32TyConKey
617 int64TyConName = tcQual pREL_INT FSLIT("Int64") int64TyConKey
620 word8TyConName = tcQual pREL_WORD FSLIT("Word8") word8TyConKey
621 word16TyConName = tcQual pREL_WORD FSLIT("Word16") word16TyConKey
622 word32TyConName = tcQual pREL_WORD FSLIT("Word32") word32TyConKey
623 word64TyConName = tcQual pREL_WORD FSLIT("Word64") word64TyConKey
624 wordTyConName = tcQual pREL_WORD FSLIT("Word") wordTyConKey
625 wordDataConName = conName wordTyConName FSLIT("W#") wordDataConKey
628 addrTyConName = tcQual aDDR FSLIT("Addr") addrTyConKey
631 ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey
632 funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey
635 byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey
636 mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey
638 -- Foreign objects and weak pointers
639 stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
640 newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
643 runSTRepName = varQual pREL_ST FSLIT("runSTRep") runSTRepIdKey
645 -- The "split" Id for splittable implicit parameters
646 splitName = varQual gLA_EXTS FSLIT("split") splitIdKey
648 -- Recursive-do notation
649 mfixName = varQual mONAD_FIX FSLIT("mfix") mfixIdKey
652 arrAName = varQual aRROW FSLIT("arr") arrAIdKey
653 composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
654 firstAName = varQual aRROW FSLIT("first") firstAIdKey
655 appAName = varQual aRROW FSLIT("app") appAIdKey
656 choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
657 loopAName = varQual aRROW FSLIT("loop") loopAIdKey
660 objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
661 -- objectTyConName was "wTcQual", but that's gone now, and
662 -- I can't see why it was wired in anyway...
663 unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
664 marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey
665 marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey
666 unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
667 checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey
670 %************************************************************************
672 \subsection{Local helpers}
674 %************************************************************************
676 All these are original names; hence mkOrig
679 varQual = mk_known_key_name varName
680 tcQual = mk_known_key_name tcName
681 clsQual = mk_known_key_name clsName
683 mk_known_key_name space mod str uniq
684 = mkExternalName uniq mod (mkOccFS space str)
687 conName :: Name -> FastString -> Unique -> Name
688 conName tycon occ uniq
689 = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ)
690 (Just tycon) noSrcLoc
692 methName :: Name -> FastString -> Unique -> Name
693 methName cls occ uniq
694 = mkExternalName uniq (nameModule cls) (mkOccFS varName occ)
698 %************************************************************************
700 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
702 %************************************************************************
703 --MetaHaskell extension hand allocate keys here
706 boundedClassKey = mkPreludeClassUnique 1
707 enumClassKey = mkPreludeClassUnique 2
708 eqClassKey = mkPreludeClassUnique 3
709 typeableClassKey = mkPreludeClassUnique 4
710 floatingClassKey = mkPreludeClassUnique 5
711 fractionalClassKey = mkPreludeClassUnique 6
712 integralClassKey = mkPreludeClassUnique 7
713 monadClassKey = mkPreludeClassUnique 8
714 dataClassKey = mkPreludeClassUnique 9
715 functorClassKey = mkPreludeClassUnique 10
716 numClassKey = mkPreludeClassUnique 11
717 ordClassKey = mkPreludeClassUnique 12
718 readClassKey = mkPreludeClassUnique 13
719 realClassKey = mkPreludeClassUnique 14
720 realFloatClassKey = mkPreludeClassUnique 15
721 realFracClassKey = mkPreludeClassUnique 16
722 showClassKey = mkPreludeClassUnique 17
723 ixClassKey = mkPreludeClassUnique 20
726 %************************************************************************
728 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
730 %************************************************************************
733 addrPrimTyConKey = mkPreludeTyConUnique 1
734 addrTyConKey = mkPreludeTyConUnique 2
735 arrayPrimTyConKey = mkPreludeTyConUnique 3
736 boolTyConKey = mkPreludeTyConUnique 4
737 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
738 charPrimTyConKey = mkPreludeTyConUnique 7
739 charTyConKey = mkPreludeTyConUnique 8
740 doublePrimTyConKey = mkPreludeTyConUnique 9
741 doubleTyConKey = mkPreludeTyConUnique 10
742 floatPrimTyConKey = mkPreludeTyConUnique 11
743 floatTyConKey = mkPreludeTyConUnique 12
744 funTyConKey = mkPreludeTyConUnique 13
745 intPrimTyConKey = mkPreludeTyConUnique 14
746 intTyConKey = mkPreludeTyConUnique 15
747 int8TyConKey = mkPreludeTyConUnique 16
748 int16TyConKey = mkPreludeTyConUnique 17
749 int32PrimTyConKey = mkPreludeTyConUnique 18
750 int32TyConKey = mkPreludeTyConUnique 19
751 int64PrimTyConKey = mkPreludeTyConUnique 20
752 int64TyConKey = mkPreludeTyConUnique 21
753 integerTyConKey = mkPreludeTyConUnique 22
754 listTyConKey = mkPreludeTyConUnique 23
755 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
756 weakPrimTyConKey = mkPreludeTyConUnique 27
757 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
758 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
759 orderingTyConKey = mkPreludeTyConUnique 30
760 mVarPrimTyConKey = mkPreludeTyConUnique 31
761 ratioTyConKey = mkPreludeTyConUnique 32
762 rationalTyConKey = mkPreludeTyConUnique 33
763 realWorldTyConKey = mkPreludeTyConUnique 34
764 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
765 stablePtrTyConKey = mkPreludeTyConUnique 36
766 statePrimTyConKey = mkPreludeTyConUnique 50
767 stableNamePrimTyConKey = mkPreludeTyConUnique 51
768 stableNameTyConKey = mkPreludeTyConUnique 52
769 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
770 mutVarPrimTyConKey = mkPreludeTyConUnique 55
771 ioTyConKey = mkPreludeTyConUnique 56
772 byteArrayTyConKey = mkPreludeTyConUnique 57
773 wordPrimTyConKey = mkPreludeTyConUnique 58
774 wordTyConKey = mkPreludeTyConUnique 59
775 word8TyConKey = mkPreludeTyConUnique 60
776 word16TyConKey = mkPreludeTyConUnique 61
777 word32PrimTyConKey = mkPreludeTyConUnique 62
778 word32TyConKey = mkPreludeTyConUnique 63
779 word64PrimTyConKey = mkPreludeTyConUnique 64
780 word64TyConKey = mkPreludeTyConUnique 65
781 liftedConKey = mkPreludeTyConUnique 66
782 unliftedConKey = mkPreludeTyConUnique 67
783 anyBoxConKey = mkPreludeTyConUnique 68
784 kindConKey = mkPreludeTyConUnique 69
785 boxityConKey = mkPreludeTyConUnique 70
786 typeConKey = mkPreludeTyConUnique 71
787 threadIdPrimTyConKey = mkPreludeTyConUnique 72
788 bcoPrimTyConKey = mkPreludeTyConUnique 73
789 ptrTyConKey = mkPreludeTyConUnique 74
790 funPtrTyConKey = mkPreludeTyConUnique 75
792 -- Generic Type Constructors
793 crossTyConKey = mkPreludeTyConUnique 79
794 plusTyConKey = mkPreludeTyConUnique 80
795 genUnitTyConKey = mkPreludeTyConUnique 81
797 -- Parallel array type constructor
798 parrTyConKey = mkPreludeTyConUnique 82
801 objectTyConKey = mkPreludeTyConUnique 83
803 eitherTyConKey = mkPreludeTyConUnique 84
805 ---------------- Template Haskell -------------------
806 -- USES TyConUniques 100-119
807 -----------------------------------------------------
809 unitTyConKey = mkTupleTyConUnique Boxed 0
812 %************************************************************************
814 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
816 %************************************************************************
819 charDataConKey = mkPreludeDataConUnique 1
820 consDataConKey = mkPreludeDataConUnique 2
821 doubleDataConKey = mkPreludeDataConUnique 3
822 falseDataConKey = mkPreludeDataConUnique 4
823 floatDataConKey = mkPreludeDataConUnique 5
824 intDataConKey = mkPreludeDataConUnique 6
825 smallIntegerDataConKey = mkPreludeDataConUnique 7
826 largeIntegerDataConKey = mkPreludeDataConUnique 8
827 nilDataConKey = mkPreludeDataConUnique 11
828 ratioDataConKey = mkPreludeDataConUnique 12
829 stableNameDataConKey = mkPreludeDataConUnique 14
830 trueDataConKey = mkPreludeDataConUnique 15
831 wordDataConKey = mkPreludeDataConUnique 16
832 ioDataConKey = mkPreludeDataConUnique 17
834 -- Generic data constructors
835 crossDataConKey = mkPreludeDataConUnique 20
836 inlDataConKey = mkPreludeDataConUnique 21
837 inrDataConKey = mkPreludeDataConUnique 22
838 genUnitDataConKey = mkPreludeDataConUnique 23
840 -- Data constructor for parallel arrays
841 parrDataConKey = mkPreludeDataConUnique 24
843 leftDataConKey = mkPreludeDataConUnique 25
844 rightDataConKey = mkPreludeDataConUnique 26
847 %************************************************************************
849 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
851 %************************************************************************
854 absentErrorIdKey = mkPreludeMiscIdUnique 1
855 augmentIdKey = mkPreludeMiscIdUnique 3
856 appendIdKey = mkPreludeMiscIdUnique 4
857 buildIdKey = mkPreludeMiscIdUnique 5
858 errorIdKey = mkPreludeMiscIdUnique 6
859 foldlIdKey = mkPreludeMiscIdUnique 7
860 foldrIdKey = mkPreludeMiscIdUnique 8
861 recSelErrorIdKey = mkPreludeMiscIdUnique 9
862 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
863 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
864 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
865 integerZeroIdKey = mkPreludeMiscIdUnique 13
866 int2IntegerIdKey = mkPreludeMiscIdUnique 14
867 seqIdKey = mkPreludeMiscIdUnique 15
868 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
869 eqStringIdKey = mkPreludeMiscIdUnique 17
870 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
871 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
872 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
873 parErrorIdKey = mkPreludeMiscIdUnique 21
874 parIdKey = mkPreludeMiscIdUnique 22
875 patErrorIdKey = mkPreludeMiscIdUnique 23
876 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
877 recConErrorIdKey = mkPreludeMiscIdUnique 25
878 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
879 traceIdKey = mkPreludeMiscIdUnique 27
880 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
881 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
882 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
883 unpackCStringIdKey = mkPreludeMiscIdUnique 31
885 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
886 concatIdKey = mkPreludeMiscIdUnique 33
887 filterIdKey = mkPreludeMiscIdUnique 34
888 zipIdKey = mkPreludeMiscIdUnique 35
889 bindIOIdKey = mkPreludeMiscIdUnique 36
890 returnIOIdKey = mkPreludeMiscIdUnique 37
891 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
892 newStablePtrIdKey = mkPreludeMiscIdUnique 39
893 plusIntegerIdKey = mkPreludeMiscIdUnique 41
894 timesIntegerIdKey = mkPreludeMiscIdUnique 42
895 printIdKey = mkPreludeMiscIdUnique 43
896 failIOIdKey = mkPreludeMiscIdUnique 44
897 nullAddrIdKey = mkPreludeMiscIdUnique 46
898 voidArgIdKey = mkPreludeMiscIdUnique 47
899 splitIdKey = mkPreludeMiscIdUnique 48
900 fstIdKey = mkPreludeMiscIdUnique 49
901 sndIdKey = mkPreludeMiscIdUnique 50
902 otherwiseIdKey = mkPreludeMiscIdUnique 51
903 assertIdKey = mkPreludeMiscIdUnique 53
904 runSTRepIdKey = mkPreludeMiscIdUnique 54
906 rootMainKey = mkPreludeMiscIdUnique 55
907 runMainKey = mkPreludeMiscIdUnique 56
909 andIdKey = mkPreludeMiscIdUnique 57
910 orIdKey = mkPreludeMiscIdUnique 58
911 thenIOIdKey = mkPreludeMiscIdUnique 59
912 lazyIdKey = mkPreludeMiscIdUnique 60
913 assertErrorIdKey = mkPreludeMiscIdUnique 61
915 -- Parallel array functions
916 nullPIdKey = mkPreludeMiscIdUnique 80
917 lengthPIdKey = mkPreludeMiscIdUnique 81
918 replicatePIdKey = mkPreludeMiscIdUnique 82
919 mapPIdKey = mkPreludeMiscIdUnique 83
920 filterPIdKey = mkPreludeMiscIdUnique 84
921 zipPIdKey = mkPreludeMiscIdUnique 85
922 crossPIdKey = mkPreludeMiscIdUnique 86
923 indexPIdKey = mkPreludeMiscIdUnique 87
924 toPIdKey = mkPreludeMiscIdUnique 88
925 enumFromToPIdKey = mkPreludeMiscIdUnique 89
926 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
927 bpermutePIdKey = mkPreludeMiscIdUnique 91
928 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
929 indexOfPIdKey = mkPreludeMiscIdUnique 93
932 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
933 marshalObjectIdKey = mkPreludeMiscIdUnique 95
934 marshalStringIdKey = mkPreludeMiscIdUnique 96
935 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
936 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
940 Certain class operations from Prelude classes. They get their own
941 uniques so we can look them up easily when we want to conjure them up
942 during type checking.
945 -- Just a place holder for unbound variables produced by the renamer:
946 unboundKey = mkPreludeMiscIdUnique 101
948 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
949 minusClassOpKey = mkPreludeMiscIdUnique 103
950 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
951 enumFromClassOpKey = mkPreludeMiscIdUnique 105
952 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
953 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
954 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
955 eqClassOpKey = mkPreludeMiscIdUnique 109
956 geClassOpKey = mkPreludeMiscIdUnique 110
957 negateClassOpKey = mkPreludeMiscIdUnique 111
958 failMClassOpKey = mkPreludeMiscIdUnique 112
959 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
960 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
961 returnMClassOpKey = mkPreludeMiscIdUnique 117
963 -- Recursive do notation
964 mfixIdKey = mkPreludeMiscIdUnique 118
967 arrAIdKey = mkPreludeMiscIdUnique 119
968 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
969 firstAIdKey = mkPreludeMiscIdUnique 121
970 appAIdKey = mkPreludeMiscIdUnique 122
971 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
972 loopAIdKey = mkPreludeMiscIdUnique 124
974 ---------------- Template Haskell -------------------
975 -- USES IdUniques 200-299
976 -----------------------------------------------------
980 %************************************************************************
982 \subsection{Standard groups of types}
984 %************************************************************************
996 -- Renamer always imports these data decls replete with constructors
997 -- so that desugarer can always see their constructors. Ugh!
1002 , mutableByteArrayTyConKey
1016 %************************************************************************
1018 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1020 %************************************************************************
1022 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1023 even though every numeric class has these two as a superclass,
1024 because the list of ambiguous dictionaries hasn't been simplified.
1032 ++ fractionalClassKeys
1034 fractionalClassKeys =
1035 [ fractionalClassKey
1041 -- the strictness analyser needs to know about numeric types
1042 -- (see SaAbsInt.lhs)
1043 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1047 standardClassKeys = derivableClassKeys ++ numericClassKeys
1049 noDictClassKeys = [] -- ToDo: remove?
1052 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1057 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1058 boundedClassKey, showClassKey, readClassKey ]