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 rOOT_MAIN_Name = mkModuleName ":Main" -- Root module for initialisation
319 rOOT_MAIN = mkHomeModule rOOT_MAIN_Name
320 -- The ':xxx' makes a moudle name that the user can never
321 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
322 -- module name still starts with a capital letter, which keeps
323 -- the z-encoded version consistent.
324 iNTERACTIVE = mkHomeModule (mkModuleName ":Interactive")
327 %************************************************************************
329 \subsection{Constructing the names of tuples
331 %************************************************************************
334 mkTupleModule :: Boxity -> Arity -> Module
335 mkTupleModule Boxed 0 = pREL_BASE
336 mkTupleModule Boxed _ = pREL_TUP
337 mkTupleModule Unboxed _ = gHC_PRIM
341 %************************************************************************
345 %************************************************************************
348 eq_RDR = nameRdrName eqName
349 ge_RDR = nameRdrName geName
350 ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=")
351 le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=")
352 gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">")
353 compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare")
354 ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT")
355 eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
356 gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT")
358 eqClass_RDR = nameRdrName eqClassName
359 numClass_RDR = nameRdrName numClassName
360 ordClass_RDR = nameRdrName ordClassName
361 enumClass_RDR = nameRdrName enumClassName
362 monadClass_RDR = nameRdrName monadClassName
364 map_RDR = varQual_RDR pREL_BASE_Name FSLIT("map")
365 append_RDR = varQual_RDR pREL_BASE_Name FSLIT("++")
367 foldr_RDR = nameRdrName foldrName
368 build_RDR = nameRdrName buildName
369 returnM_RDR = nameRdrName returnMName
370 bindM_RDR = nameRdrName bindMName
371 failM_RDR = nameRdrName failMName
373 and_RDR = nameRdrName andName
375 left_RDR = nameRdrName leftDataConName
376 right_RDR = nameRdrName rightDataConName
378 fromEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("fromEnum")
379 toEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("toEnum")
381 enumFrom_RDR = nameRdrName enumFromName
382 enumFromTo_RDR = nameRdrName enumFromToName
383 enumFromThen_RDR = nameRdrName enumFromThenName
384 enumFromThenTo_RDR = nameRdrName enumFromThenToName
386 ratioDataCon_RDR = nameRdrName ratioDataConName
387 plusInteger_RDR = nameRdrName plusIntegerName
388 timesInteger_RDR = nameRdrName timesIntegerName
390 ioDataCon_RDR = nameRdrName ioDataConName
392 eqString_RDR = nameRdrName eqStringName
393 unpackCString_RDR = nameRdrName unpackCStringName
394 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
395 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
397 newStablePtr_RDR = nameRdrName newStablePtrName
398 addrDataCon_RDR = dataQual_RDR aDDR_Name FSLIT("A#")
399 wordDataCon_RDR = dataQual_RDR pREL_WORD_Name FSLIT("W#")
401 bindIO_RDR = nameRdrName bindIOName
402 returnIO_RDR = nameRdrName returnIOName
404 fromInteger_RDR = nameRdrName fromIntegerName
405 fromRational_RDR = nameRdrName fromRationalName
406 minus_RDR = nameRdrName minusName
407 times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*")
408 plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+")
410 compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".")
412 not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not")
413 getTag_RDR = varQual_RDR pREL_BASE_Name FSLIT("getTag")
414 succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ")
415 pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred")
416 minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
417 maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
418 range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range")
419 inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange")
420 index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index")
422 readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList")
423 readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault")
424 readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec")
425 readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault")
426 readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec")
427 parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens")
428 choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose")
429 lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP")
431 punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc")
432 ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident")
433 symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol")
435 step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step")
436 alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++")
437 reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset")
438 prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec")
440 showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList")
441 showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
442 showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
443 showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString")
444 showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace")
445 showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen")
447 typeOf_RDR = varQual_RDR tYPEABLE_Name FSLIT("typeOf")
448 mkTypeRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkAppTy")
449 mkTyConRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkTyCon")
451 undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined")
453 crossDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT(":*:")
454 inlDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inl")
455 inrDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inr")
456 genUnitDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Unit")
458 ----------------------
459 varQual_RDR mod str = mkOrig mod (mkOccFS varName str)
460 tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str)
461 clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str)
462 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
465 %************************************************************************
467 \subsection{Known-key names}
469 %************************************************************************
471 Many of these Names are not really "built in", but some parts of the
472 compiler (notably the deriving mechanism) need to mention their names,
473 and it's convenient to write them all down in one place.
475 --MetaHaskell Extension add the constrs and the lower case case
476 -- guys as well (perhaps) e.g. see trueDataConName below
480 rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
481 runIOName = varQual pREL_TOP_HANDLER FSLIT("runIO") runMainKey
483 orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
485 eitherTyConName = tcQual pREL_EITHER FSLIT("Either") eitherTyConKey
486 leftDataConName = conName eitherTyConName FSLIT("Left") leftDataConKey
487 rightDataConName = conName eitherTyConName FSLIT("Right") rightDataConKey
490 crossTyConName = tcQual pREL_BASE FSLIT(":*:") crossTyConKey
491 plusTyConName = tcQual pREL_BASE FSLIT(":+:") plusTyConKey
492 genUnitTyConName = tcQual pREL_BASE FSLIT("Unit") genUnitTyConKey
494 -- Base strings Strings
495 unpackCStringName = varQual pREL_BASE FSLIT("unpackCString#") unpackCStringIdKey
496 unpackCStringAppendName = varQual pREL_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
497 unpackCStringFoldrName = varQual pREL_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
498 unpackCStringUtf8Name = varQual pREL_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
499 eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey
501 -- Base classes (Eq, Ord, Functor)
502 eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
503 eqName = methName eqClassName FSLIT("==") eqClassOpKey
504 ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
505 geName = methName ordClassName FSLIT(">=") geClassOpKey
506 functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey
509 monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
510 thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
511 bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
512 returnMName = methName monadClassName FSLIT("return") returnMClassOpKey
513 failMName = methName monadClassName FSLIT("fail") failMClassOpKey
515 -- Random PrelBase functions
516 otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey
517 foldrName = varQual pREL_BASE FSLIT("foldr") foldrIdKey
518 buildName = varQual pREL_BASE FSLIT("build") buildIdKey
519 augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey
520 appendName = varQual pREL_BASE FSLIT("++") appendIdKey
521 andName = varQual pREL_BASE FSLIT("&&") andIdKey
522 orName = varQual pREL_BASE FSLIT("||") orIdKey
523 assertName = varQual pREL_BASE FSLIT("assert") assertIdKey
526 fstName = varQual pREL_TUP FSLIT("fst") fstIdKey
527 sndName = varQual pREL_TUP FSLIT("snd") sndIdKey
530 numClassName = clsQual pREL_NUM FSLIT("Num") numClassKey
531 fromIntegerName = methName numClassName FSLIT("fromInteger") fromIntegerClassOpKey
532 minusName = methName numClassName FSLIT("-") minusClassOpKey
533 negateName = methName numClassName FSLIT("negate") negateClassOpKey
534 plusIntegerName = varQual pREL_NUM FSLIT("plusInteger") plusIntegerIdKey
535 timesIntegerName = varQual pREL_NUM FSLIT("timesInteger") timesIntegerIdKey
536 integerTyConName = tcQual pREL_NUM FSLIT("Integer") integerTyConKey
537 smallIntegerDataConName = conName integerTyConName FSLIT("S#") smallIntegerDataConKey
538 largeIntegerDataConName = conName integerTyConName FSLIT("J#") largeIntegerDataConKey
540 -- PrelReal types and classes
541 rationalTyConName = tcQual pREL_REAL FSLIT("Rational") rationalTyConKey
542 ratioTyConName = tcQual pREL_REAL FSLIT("Ratio") ratioTyConKey
543 ratioDataConName = conName ratioTyConName FSLIT(":%") ratioDataConKey
544 realClassName = clsQual pREL_REAL FSLIT("Real") realClassKey
545 integralClassName = clsQual pREL_REAL FSLIT("Integral") integralClassKey
546 realFracClassName = clsQual pREL_REAL FSLIT("RealFrac") realFracClassKey
547 fractionalClassName = clsQual pREL_REAL FSLIT("Fractional") fractionalClassKey
548 fromRationalName = methName fractionalClassName FSLIT("fromRational") fromRationalClassOpKey
551 floatingClassName = clsQual pREL_FLOAT FSLIT("Floating") floatingClassKey
552 realFloatClassName = clsQual pREL_FLOAT FSLIT("RealFloat") realFloatClassKey
555 ixClassName = clsQual pREL_ARR FSLIT("Ix") ixClassKey
557 -- Class Typeable and Data
558 typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
559 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
562 assertErrorName = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey
564 -- Enum module (Enum, Bounded)
565 enumClassName = clsQual pREL_ENUM FSLIT("Enum") enumClassKey
566 enumFromName = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey
567 enumFromToName = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey
568 enumFromThenName = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey
569 enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey
570 boundedClassName = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey
573 concatName = varQual pREL_LIST FSLIT("concat") concatIdKey
574 filterName = varQual pREL_LIST FSLIT("filter") filterIdKey
575 zipName = varQual pREL_LIST FSLIT("zip") zipIdKey
578 showClassName = clsQual pREL_SHOW FSLIT("Show") showClassKey
581 readClassName = clsQual pREL_READ FSLIT("Read") readClassKey
583 -- parallel array types and functions
584 enumFromToPName = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey
585 enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
586 nullPName = varQual pREL_PARR FSLIT("nullP") nullPIdKey
587 lengthPName = varQual pREL_PARR FSLIT("lengthP") lengthPIdKey
588 replicatePName = varQual pREL_PARR FSLIT("replicateP") replicatePIdKey
589 mapPName = varQual pREL_PARR FSLIT("mapP") mapPIdKey
590 filterPName = varQual pREL_PARR FSLIT("filterP") filterPIdKey
591 zipPName = varQual pREL_PARR FSLIT("zipP") zipPIdKey
592 crossPName = varQual pREL_PARR FSLIT("crossP") crossPIdKey
593 indexPName = varQual pREL_PARR FSLIT("!:") indexPIdKey
594 toPName = varQual pREL_PARR FSLIT("toP") toPIdKey
595 bpermutePName = varQual pREL_PARR FSLIT("bpermuteP") bpermutePIdKey
596 bpermuteDftPName = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
597 indexOfPName = varQual pREL_PARR FSLIT("indexOfP") indexOfPIdKey
600 ioTyConName = tcQual pREL_IO_BASE FSLIT("IO") ioTyConKey
601 ioDataConName = conName ioTyConName FSLIT("IO") ioDataConKey
602 thenIOName = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey
603 bindIOName = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey
604 returnIOName = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey
605 failIOName = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey
608 printName = varQual sYSTEM_IO FSLIT("print") printIdKey
610 -- Int, Word, and Addr things
611 int8TyConName = tcQual pREL_INT FSLIT("Int8") int8TyConKey
612 int16TyConName = tcQual pREL_INT FSLIT("Int16") int16TyConKey
613 int32TyConName = tcQual pREL_INT FSLIT("Int32") int32TyConKey
614 int64TyConName = tcQual pREL_INT FSLIT("Int64") int64TyConKey
617 word8TyConName = tcQual pREL_WORD FSLIT("Word8") word8TyConKey
618 word16TyConName = tcQual pREL_WORD FSLIT("Word16") word16TyConKey
619 word32TyConName = tcQual pREL_WORD FSLIT("Word32") word32TyConKey
620 word64TyConName = tcQual pREL_WORD FSLIT("Word64") word64TyConKey
621 wordTyConName = tcQual pREL_WORD FSLIT("Word") wordTyConKey
622 wordDataConName = conName wordTyConName FSLIT("W#") wordDataConKey
625 addrTyConName = tcQual aDDR FSLIT("Addr") addrTyConKey
628 ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey
629 funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey
632 byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey
633 mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey
635 -- Foreign objects and weak pointers
636 stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
637 newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
640 runSTRepName = varQual pREL_ST FSLIT("runSTRep") runSTRepIdKey
642 -- The "split" Id for splittable implicit parameters
643 splitName = varQual gLA_EXTS FSLIT("split") splitIdKey
645 -- Recursive-do notation
646 mfixName = varQual mONAD_FIX FSLIT("mfix") mfixIdKey
649 arrAName = varQual aRROW FSLIT("arr") arrAIdKey
650 composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
651 firstAName = varQual aRROW FSLIT("first") firstAIdKey
652 appAName = varQual aRROW FSLIT("app") appAIdKey
653 choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
654 loopAName = varQual aRROW FSLIT("loop") loopAIdKey
657 objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
658 -- objectTyConName was "wTcQual", but that's gone now, and
659 -- I can't see why it was wired in anyway...
660 unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
661 marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey
662 marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey
663 unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
664 checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey
667 %************************************************************************
669 \subsection{Local helpers}
671 %************************************************************************
673 All these are original names; hence mkOrig
676 varQual = mk_known_key_name varName
677 tcQual = mk_known_key_name tcName
678 clsQual = mk_known_key_name clsName
680 mk_known_key_name space mod str uniq
681 = mkExternalName uniq mod (mkOccFS space str)
684 conName :: Name -> FastString -> Unique -> Name
685 conName tycon occ uniq
686 = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ)
687 (Just tycon) noSrcLoc
689 methName :: Name -> FastString -> Unique -> Name
690 methName cls occ uniq
691 = mkExternalName uniq (nameModule cls) (mkOccFS varName occ)
695 %************************************************************************
697 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
699 %************************************************************************
700 --MetaHaskell extension hand allocate keys here
703 boundedClassKey = mkPreludeClassUnique 1
704 enumClassKey = mkPreludeClassUnique 2
705 eqClassKey = mkPreludeClassUnique 3
706 typeableClassKey = mkPreludeClassUnique 4
707 floatingClassKey = mkPreludeClassUnique 5
708 fractionalClassKey = mkPreludeClassUnique 6
709 integralClassKey = mkPreludeClassUnique 7
710 monadClassKey = mkPreludeClassUnique 8
711 dataClassKey = mkPreludeClassUnique 9
712 functorClassKey = mkPreludeClassUnique 10
713 numClassKey = mkPreludeClassUnique 11
714 ordClassKey = mkPreludeClassUnique 12
715 readClassKey = mkPreludeClassUnique 13
716 realClassKey = mkPreludeClassUnique 14
717 realFloatClassKey = mkPreludeClassUnique 15
718 realFracClassKey = mkPreludeClassUnique 16
719 showClassKey = mkPreludeClassUnique 17
720 ixClassKey = mkPreludeClassUnique 20
723 %************************************************************************
725 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
727 %************************************************************************
730 addrPrimTyConKey = mkPreludeTyConUnique 1
731 addrTyConKey = mkPreludeTyConUnique 2
732 arrayPrimTyConKey = mkPreludeTyConUnique 3
733 boolTyConKey = mkPreludeTyConUnique 4
734 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
735 charPrimTyConKey = mkPreludeTyConUnique 7
736 charTyConKey = mkPreludeTyConUnique 8
737 doublePrimTyConKey = mkPreludeTyConUnique 9
738 doubleTyConKey = mkPreludeTyConUnique 10
739 floatPrimTyConKey = mkPreludeTyConUnique 11
740 floatTyConKey = mkPreludeTyConUnique 12
741 funTyConKey = mkPreludeTyConUnique 13
742 intPrimTyConKey = mkPreludeTyConUnique 14
743 intTyConKey = mkPreludeTyConUnique 15
744 int8TyConKey = mkPreludeTyConUnique 16
745 int16TyConKey = mkPreludeTyConUnique 17
746 int32PrimTyConKey = mkPreludeTyConUnique 18
747 int32TyConKey = mkPreludeTyConUnique 19
748 int64PrimTyConKey = mkPreludeTyConUnique 20
749 int64TyConKey = mkPreludeTyConUnique 21
750 integerTyConKey = mkPreludeTyConUnique 22
751 listTyConKey = mkPreludeTyConUnique 23
752 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
753 weakPrimTyConKey = mkPreludeTyConUnique 27
754 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
755 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
756 orderingTyConKey = mkPreludeTyConUnique 30
757 mVarPrimTyConKey = mkPreludeTyConUnique 31
758 ratioTyConKey = mkPreludeTyConUnique 32
759 rationalTyConKey = mkPreludeTyConUnique 33
760 realWorldTyConKey = mkPreludeTyConUnique 34
761 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
762 stablePtrTyConKey = mkPreludeTyConUnique 36
763 statePrimTyConKey = mkPreludeTyConUnique 50
764 stableNamePrimTyConKey = mkPreludeTyConUnique 51
765 stableNameTyConKey = mkPreludeTyConUnique 52
766 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
767 mutVarPrimTyConKey = mkPreludeTyConUnique 55
768 ioTyConKey = mkPreludeTyConUnique 56
769 byteArrayTyConKey = mkPreludeTyConUnique 57
770 wordPrimTyConKey = mkPreludeTyConUnique 58
771 wordTyConKey = mkPreludeTyConUnique 59
772 word8TyConKey = mkPreludeTyConUnique 60
773 word16TyConKey = mkPreludeTyConUnique 61
774 word32PrimTyConKey = mkPreludeTyConUnique 62
775 word32TyConKey = mkPreludeTyConUnique 63
776 word64PrimTyConKey = mkPreludeTyConUnique 64
777 word64TyConKey = mkPreludeTyConUnique 65
778 liftedConKey = mkPreludeTyConUnique 66
779 unliftedConKey = mkPreludeTyConUnique 67
780 anyBoxConKey = mkPreludeTyConUnique 68
781 kindConKey = mkPreludeTyConUnique 69
782 boxityConKey = mkPreludeTyConUnique 70
783 typeConKey = mkPreludeTyConUnique 71
784 threadIdPrimTyConKey = mkPreludeTyConUnique 72
785 bcoPrimTyConKey = mkPreludeTyConUnique 73
786 ptrTyConKey = mkPreludeTyConUnique 74
787 funPtrTyConKey = mkPreludeTyConUnique 75
789 -- Generic Type Constructors
790 crossTyConKey = mkPreludeTyConUnique 79
791 plusTyConKey = mkPreludeTyConUnique 80
792 genUnitTyConKey = mkPreludeTyConUnique 81
794 -- Parallel array type constructor
795 parrTyConKey = mkPreludeTyConUnique 82
798 objectTyConKey = mkPreludeTyConUnique 83
800 eitherTyConKey = mkPreludeTyConUnique 84
802 ---------------- Template Haskell -------------------
803 -- USES TyConUniques 100-119
804 -----------------------------------------------------
806 unitTyConKey = mkTupleTyConUnique Boxed 0
809 %************************************************************************
811 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
813 %************************************************************************
816 charDataConKey = mkPreludeDataConUnique 1
817 consDataConKey = mkPreludeDataConUnique 2
818 doubleDataConKey = mkPreludeDataConUnique 3
819 falseDataConKey = mkPreludeDataConUnique 4
820 floatDataConKey = mkPreludeDataConUnique 5
821 intDataConKey = mkPreludeDataConUnique 6
822 smallIntegerDataConKey = mkPreludeDataConUnique 7
823 largeIntegerDataConKey = mkPreludeDataConUnique 8
824 nilDataConKey = mkPreludeDataConUnique 11
825 ratioDataConKey = mkPreludeDataConUnique 12
826 stableNameDataConKey = mkPreludeDataConUnique 14
827 trueDataConKey = mkPreludeDataConUnique 15
828 wordDataConKey = mkPreludeDataConUnique 16
829 ioDataConKey = mkPreludeDataConUnique 17
831 -- Generic data constructors
832 crossDataConKey = mkPreludeDataConUnique 20
833 inlDataConKey = mkPreludeDataConUnique 21
834 inrDataConKey = mkPreludeDataConUnique 22
835 genUnitDataConKey = mkPreludeDataConUnique 23
837 -- Data constructor for parallel arrays
838 parrDataConKey = mkPreludeDataConUnique 24
840 leftDataConKey = mkPreludeDataConUnique 25
841 rightDataConKey = mkPreludeDataConUnique 26
844 %************************************************************************
846 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
848 %************************************************************************
851 absentErrorIdKey = mkPreludeMiscIdUnique 1
852 augmentIdKey = mkPreludeMiscIdUnique 3
853 appendIdKey = mkPreludeMiscIdUnique 4
854 buildIdKey = mkPreludeMiscIdUnique 5
855 errorIdKey = mkPreludeMiscIdUnique 6
856 foldlIdKey = mkPreludeMiscIdUnique 7
857 foldrIdKey = mkPreludeMiscIdUnique 8
858 recSelErrorIdKey = mkPreludeMiscIdUnique 9
859 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
860 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
861 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
862 integerZeroIdKey = mkPreludeMiscIdUnique 13
863 int2IntegerIdKey = mkPreludeMiscIdUnique 14
864 seqIdKey = mkPreludeMiscIdUnique 15
865 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
866 eqStringIdKey = mkPreludeMiscIdUnique 17
867 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
868 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
869 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
870 parErrorIdKey = mkPreludeMiscIdUnique 21
871 parIdKey = mkPreludeMiscIdUnique 22
872 patErrorIdKey = mkPreludeMiscIdUnique 23
873 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
874 recConErrorIdKey = mkPreludeMiscIdUnique 25
875 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
876 traceIdKey = mkPreludeMiscIdUnique 27
877 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
878 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
879 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
880 unpackCStringIdKey = mkPreludeMiscIdUnique 31
882 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
883 concatIdKey = mkPreludeMiscIdUnique 33
884 filterIdKey = mkPreludeMiscIdUnique 34
885 zipIdKey = mkPreludeMiscIdUnique 35
886 bindIOIdKey = mkPreludeMiscIdUnique 36
887 returnIOIdKey = mkPreludeMiscIdUnique 37
888 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
889 newStablePtrIdKey = mkPreludeMiscIdUnique 39
890 plusIntegerIdKey = mkPreludeMiscIdUnique 41
891 timesIntegerIdKey = mkPreludeMiscIdUnique 42
892 printIdKey = mkPreludeMiscIdUnique 43
893 failIOIdKey = mkPreludeMiscIdUnique 44
894 nullAddrIdKey = mkPreludeMiscIdUnique 46
895 voidArgIdKey = mkPreludeMiscIdUnique 47
896 splitIdKey = mkPreludeMiscIdUnique 48
897 fstIdKey = mkPreludeMiscIdUnique 49
898 sndIdKey = mkPreludeMiscIdUnique 50
899 otherwiseIdKey = mkPreludeMiscIdUnique 51
900 assertIdKey = mkPreludeMiscIdUnique 53
901 runSTRepIdKey = mkPreludeMiscIdUnique 54
903 rootMainKey = mkPreludeMiscIdUnique 55
904 runMainKey = mkPreludeMiscIdUnique 56
906 andIdKey = mkPreludeMiscIdUnique 57
907 orIdKey = mkPreludeMiscIdUnique 58
908 thenIOIdKey = mkPreludeMiscIdUnique 59
909 lazyIdKey = mkPreludeMiscIdUnique 60
910 assertErrorIdKey = mkPreludeMiscIdUnique 61
912 -- Parallel array functions
913 nullPIdKey = mkPreludeMiscIdUnique 80
914 lengthPIdKey = mkPreludeMiscIdUnique 81
915 replicatePIdKey = mkPreludeMiscIdUnique 82
916 mapPIdKey = mkPreludeMiscIdUnique 83
917 filterPIdKey = mkPreludeMiscIdUnique 84
918 zipPIdKey = mkPreludeMiscIdUnique 85
919 crossPIdKey = mkPreludeMiscIdUnique 86
920 indexPIdKey = mkPreludeMiscIdUnique 87
921 toPIdKey = mkPreludeMiscIdUnique 88
922 enumFromToPIdKey = mkPreludeMiscIdUnique 89
923 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
924 bpermutePIdKey = mkPreludeMiscIdUnique 91
925 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
926 indexOfPIdKey = mkPreludeMiscIdUnique 93
929 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
930 marshalObjectIdKey = mkPreludeMiscIdUnique 95
931 marshalStringIdKey = mkPreludeMiscIdUnique 96
932 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
933 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
937 Certain class operations from Prelude classes. They get their own
938 uniques so we can look them up easily when we want to conjure them up
939 during type checking.
942 -- Just a place holder for unbound variables produced by the renamer:
943 unboundKey = mkPreludeMiscIdUnique 101
945 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
946 minusClassOpKey = mkPreludeMiscIdUnique 103
947 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
948 enumFromClassOpKey = mkPreludeMiscIdUnique 105
949 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
950 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
951 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
952 eqClassOpKey = mkPreludeMiscIdUnique 109
953 geClassOpKey = mkPreludeMiscIdUnique 110
954 negateClassOpKey = mkPreludeMiscIdUnique 111
955 failMClassOpKey = mkPreludeMiscIdUnique 112
956 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
957 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
958 returnMClassOpKey = mkPreludeMiscIdUnique 117
960 -- Recursive do notation
961 mfixIdKey = mkPreludeMiscIdUnique 118
964 arrAIdKey = mkPreludeMiscIdUnique 119
965 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
966 firstAIdKey = mkPreludeMiscIdUnique 121
967 appAIdKey = mkPreludeMiscIdUnique 122
968 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
969 loopAIdKey = mkPreludeMiscIdUnique 124
971 ---------------- Template Haskell -------------------
972 -- USES IdUniques 200-299
973 -----------------------------------------------------
977 %************************************************************************
979 \subsection{Standard groups of types}
981 %************************************************************************
993 -- Renamer always imports these data decls replete with constructors
994 -- so that desugarer can always see their constructors. Ugh!
999 , mutableByteArrayTyConKey
1013 %************************************************************************
1015 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1017 %************************************************************************
1019 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1020 even though every numeric class has these two as a superclass,
1021 because the list of ambiguous dictionaries hasn't been simplified.
1029 ++ fractionalClassKeys
1031 fractionalClassKeys =
1032 [ fractionalClassKey
1038 -- the strictness analyser needs to know about numeric types
1039 -- (see SaAbsInt.lhs)
1040 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1044 standardClassKeys = derivableClassKeys ++ numericClassKeys
1046 noDictClassKeys = [] -- ToDo: remove?
1049 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1054 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1055 boundedClassKey, showClassKey, readClassKey ]