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, mkModule )
53 import OccName ( dataName, tcName, clsName, varName, mkOccFS
56 import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
57 import Unique ( Unique, Uniquable(..), hasKey,
58 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
59 mkPreludeTyConUnique, mkPreludeClassUnique,
62 import BasicTypes ( Boxity(..), Arity )
63 import Name ( Name, mkInternalName, mkExternalName, nameModule )
64 import SrcLoc ( noSrcLoc )
69 %************************************************************************
71 \subsection{Local Names}
73 %************************************************************************
75 This *local* name is used by the interactive stuff
78 itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
82 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
83 -- during compiler debugging.
84 mkUnboundName :: RdrName -> Name
85 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
87 isUnboundName :: Name -> Bool
88 isUnboundName name = name `hasKey` unboundKey
92 %************************************************************************
94 \subsection{Known key Names}
96 %************************************************************************
98 This section tells what the compiler knows about the assocation of
99 names with uniques. These ones are the *non* wired-in ones. The
100 wired in ones are defined in TysWiredIn etc.
103 basicKnownKeyNames :: [Name]
107 ++ typeableClassNames
108 ++ [ -- Type constructors (synonyms especially)
109 ioTyConName, ioDataConName,
116 mutableByteArrayTyConName,
117 integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
119 -- Classes. *Must* include:
120 -- classes that are grabbed by key (e.g., eqClassKey)
121 -- classes in "Class.standardClassKeys" (quite a few)
122 eqClassName, -- mentioned, derivable
123 ordClassName, -- derivable
124 boundedClassName, -- derivable
125 numClassName, -- mentioned, numeric
126 enumClassName, -- derivable
129 realClassName, -- numeric
130 integralClassName, -- numeric
131 fractionalClassName, -- numeric
132 floatingClassName, -- numeric
133 realFracClassName, -- numeric
134 realFloatClassName, -- numeric
138 negateName, minusName,
139 fromRationalName, fromIntegerName,
143 enumFromName, enumFromThenName,
144 enumFromThenToName, enumFromToName,
145 enumFromToPName, enumFromThenToPName,
148 thenIOName, bindIOName, returnIOName, failIOName,
154 arrAName, composeAName, firstAName,
155 appAName, choiceAName, loopAName,
170 unpackCStringName, unpackCStringAppendName,
171 unpackCStringFoldrName, unpackCStringUtf8Name,
174 concatName, filterName,
175 zipName, foldrName, buildName, augmentName, appendName,
177 -- Parallel array operations
178 nullPName, lengthPName, replicatePName, mapPName,
179 filterPName, zipPName, crossPName, indexPName,
180 toPName, bpermutePName, bpermuteDftPName, indexOfPName,
182 -- FFI primitive types that are not wired-in.
183 stablePtrTyConName, ptrTyConName, funPtrTyConName, addrTyConName,
184 int8TyConName, int16TyConName, int32TyConName, int64TyConName,
185 wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
189 plusIntegerName, timesIntegerName,
190 eqStringName, assertName, assertErrorName, runSTRepName,
191 printName, splitName, fstName, sndName,
197 , eitherTyConName, leftDataConName, rightDataConName
200 , objectTyConName, marshalObjectName, unmarshalObjectName
201 , marshalStringName, unmarshalStringName, checkDotnetResName
204 monadNames :: [Name] -- The monad ops need by a HsDo
205 monadNames = [returnMName, failMName, bindMName, thenMName]
207 genericTyConNames :: [Name]
208 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
212 %************************************************************************
214 \subsection{Module names}
216 %************************************************************************
219 --MetaHaskell Extension Add a new module here
221 pRELUDE = mkModule "Prelude"
222 gHC_PRIM = mkModule "GHC.Prim" -- Primitive types and values
223 pREL_BASE = mkModule "GHC.Base"
224 pREL_ENUM = mkModule "GHC.Enum"
225 pREL_SHOW = mkModule "GHC.Show"
226 pREL_READ = mkModule "GHC.Read"
227 pREL_NUM = mkModule "GHC.Num"
228 pREL_LIST = mkModule "GHC.List"
229 pREL_PARR = mkModule "GHC.PArr"
230 pREL_TUP = mkModule "Data.Tuple"
231 pREL_EITHER = mkModule "Data.Either"
232 pREL_PACK = mkModule "GHC.Pack"
233 pREL_CONC = mkModule "GHC.Conc"
234 pREL_IO_BASE = mkModule "GHC.IOBase"
235 pREL_ST = mkModule "GHC.ST"
236 pREL_ARR = mkModule "GHC.Arr"
237 pREL_BYTEARR = mkModule "PrelByteArr"
238 pREL_STABLE = mkModule "GHC.Stable"
239 pREL_ADDR = mkModule "GHC.Addr"
240 pREL_PTR = mkModule "GHC.Ptr"
241 pREL_ERR = mkModule "GHC.Err"
242 pREL_REAL = mkModule "GHC.Real"
243 pREL_FLOAT = mkModule "GHC.Float"
244 pREL_TOP_HANDLER= mkModule "GHC.TopHandler"
245 sYSTEM_IO = mkModule "System.IO"
246 dYNAMIC = mkModule "Data.Dynamic"
247 tYPEABLE = mkModule "Data.Typeable"
248 gENERICS = mkModule "Data.Generics.Basics"
249 dOTNET = mkModule "GHC.Dotnet"
251 rEAD_PREC = mkModule "Text.ParserCombinators.ReadPrec"
252 lEX = mkModule "Text.Read.Lex"
254 mAIN = mkModule "Main"
255 pREL_INT = mkModule "GHC.Int"
256 pREL_WORD = mkModule "GHC.Word"
257 mONAD_FIX = mkModule "Control.Monad.Fix"
258 aRROW = mkModule "Control.Arrow"
259 aDDR = mkModule "Addr"
261 gLA_EXTS = mkModule "GHC.Exts"
262 rOOT_MAIN = mkModule ":Main" -- Root module for initialisation
263 -- The ':xxx' makes a moudle name that the user can never
264 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
265 -- module name still starts with a capital letter, which keeps
266 -- the z-encoded version consistent.
268 iNTERACTIVE = mkModule ":Interactive"
271 %************************************************************************
273 \subsection{Constructing the names of tuples
275 %************************************************************************
278 mkTupleModule :: Boxity -> Arity -> Module
279 mkTupleModule Boxed 0 = pREL_BASE
280 mkTupleModule Boxed _ = pREL_TUP
281 mkTupleModule Unboxed _ = gHC_PRIM
285 %************************************************************************
289 %************************************************************************
292 main_RDR_Unqual = mkUnqual varName FSLIT("main")
293 -- We definitely don't want an Orig RdrName, because
294 -- main might, in principle, be imported into module Main
296 eq_RDR = nameRdrName eqName
297 ge_RDR = nameRdrName geName
298 ne_RDR = varQual_RDR pREL_BASE FSLIT("/=")
299 le_RDR = varQual_RDR pREL_BASE FSLIT("<=")
300 gt_RDR = varQual_RDR pREL_BASE FSLIT(">")
301 compare_RDR = varQual_RDR pREL_BASE FSLIT("compare")
302 ltTag_RDR = dataQual_RDR pREL_BASE FSLIT("LT")
303 eqTag_RDR = dataQual_RDR pREL_BASE FSLIT("EQ")
304 gtTag_RDR = dataQual_RDR pREL_BASE FSLIT("GT")
306 eqClass_RDR = nameRdrName eqClassName
307 numClass_RDR = nameRdrName numClassName
308 ordClass_RDR = nameRdrName ordClassName
309 enumClass_RDR = nameRdrName enumClassName
310 monadClass_RDR = nameRdrName monadClassName
312 map_RDR = varQual_RDR pREL_BASE FSLIT("map")
313 append_RDR = varQual_RDR pREL_BASE FSLIT("++")
315 foldr_RDR = nameRdrName foldrName
316 build_RDR = nameRdrName buildName
317 returnM_RDR = nameRdrName returnMName
318 bindM_RDR = nameRdrName bindMName
319 failM_RDR = nameRdrName failMName
321 and_RDR = nameRdrName andName
323 left_RDR = nameRdrName leftDataConName
324 right_RDR = nameRdrName rightDataConName
326 fromEnum_RDR = varQual_RDR pREL_ENUM FSLIT("fromEnum")
327 toEnum_RDR = varQual_RDR pREL_ENUM FSLIT("toEnum")
329 enumFrom_RDR = nameRdrName enumFromName
330 enumFromTo_RDR = nameRdrName enumFromToName
331 enumFromThen_RDR = nameRdrName enumFromThenName
332 enumFromThenTo_RDR = nameRdrName enumFromThenToName
334 ratioDataCon_RDR = nameRdrName ratioDataConName
335 plusInteger_RDR = nameRdrName plusIntegerName
336 timesInteger_RDR = nameRdrName timesIntegerName
338 ioDataCon_RDR = nameRdrName ioDataConName
340 eqString_RDR = nameRdrName eqStringName
341 unpackCString_RDR = nameRdrName unpackCStringName
342 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
343 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
345 newStablePtr_RDR = nameRdrName newStablePtrName
346 addrDataCon_RDR = dataQual_RDR aDDR FSLIT("A#")
347 wordDataCon_RDR = dataQual_RDR pREL_WORD FSLIT("W#")
349 bindIO_RDR = nameRdrName bindIOName
350 returnIO_RDR = nameRdrName returnIOName
352 fromInteger_RDR = nameRdrName fromIntegerName
353 fromRational_RDR = nameRdrName fromRationalName
354 minus_RDR = nameRdrName minusName
355 times_RDR = varQual_RDR pREL_NUM FSLIT("*")
356 plus_RDR = varQual_RDR pREL_NUM FSLIT("+")
358 compose_RDR = varQual_RDR pREL_BASE FSLIT(".")
360 not_RDR = varQual_RDR pREL_BASE FSLIT("not")
361 getTag_RDR = varQual_RDR pREL_BASE FSLIT("getTag")
362 succ_RDR = varQual_RDR pREL_ENUM FSLIT("succ")
363 pred_RDR = varQual_RDR pREL_ENUM FSLIT("pred")
364 minBound_RDR = varQual_RDR pREL_ENUM FSLIT("minBound")
365 maxBound_RDR = varQual_RDR pREL_ENUM FSLIT("maxBound")
366 range_RDR = varQual_RDR pREL_ARR FSLIT("range")
367 inRange_RDR = varQual_RDR pREL_ARR FSLIT("inRange")
368 index_RDR = varQual_RDR pREL_ARR FSLIT("index")
370 readList_RDR = varQual_RDR pREL_READ FSLIT("readList")
371 readListDefault_RDR = varQual_RDR pREL_READ FSLIT("readListDefault")
372 readListPrec_RDR = varQual_RDR pREL_READ FSLIT("readListPrec")
373 readListPrecDefault_RDR = varQual_RDR pREL_READ FSLIT("readListPrecDefault")
374 readPrec_RDR = varQual_RDR pREL_READ FSLIT("readPrec")
375 parens_RDR = varQual_RDR pREL_READ FSLIT("parens")
376 choose_RDR = varQual_RDR pREL_READ FSLIT("choose")
377 lexP_RDR = varQual_RDR pREL_READ FSLIT("lexP")
379 punc_RDR = dataQual_RDR lEX FSLIT("Punc")
380 ident_RDR = dataQual_RDR lEX FSLIT("Ident")
381 symbol_RDR = dataQual_RDR lEX FSLIT("Symbol")
383 step_RDR = varQual_RDR rEAD_PREC FSLIT("step")
384 alt_RDR = varQual_RDR rEAD_PREC FSLIT("+++")
385 reset_RDR = varQual_RDR rEAD_PREC FSLIT("reset")
386 prec_RDR = varQual_RDR rEAD_PREC FSLIT("prec")
388 showList_RDR = varQual_RDR pREL_SHOW FSLIT("showList")
389 showList___RDR = varQual_RDR pREL_SHOW FSLIT("showList__")
390 showsPrec_RDR = varQual_RDR pREL_SHOW FSLIT("showsPrec")
391 showString_RDR = varQual_RDR pREL_SHOW FSLIT("showString")
392 showSpace_RDR = varQual_RDR pREL_SHOW FSLIT("showSpace")
393 showParen_RDR = varQual_RDR pREL_SHOW FSLIT("showParen")
395 typeOf_RDR = varQual_RDR tYPEABLE FSLIT("typeOf")
396 mkTypeRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyConApp")
397 mkTyConRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyCon")
399 undefined_RDR = varQual_RDR pREL_ERR FSLIT("undefined")
401 crossDataCon_RDR = dataQual_RDR pREL_BASE FSLIT(":*:")
402 inlDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Inl")
403 inrDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Inr")
404 genUnitDataCon_RDR = dataQual_RDR pREL_BASE FSLIT("Unit")
406 ----------------------
407 varQual_RDR mod str = mkOrig mod (mkOccFS varName str)
408 tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str)
409 clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str)
410 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
413 %************************************************************************
415 \subsection{Known-key names}
417 %************************************************************************
419 Many of these Names are not really "built in", but some parts of the
420 compiler (notably the deriving mechanism) need to mention their names,
421 and it's convenient to write them all down in one place.
423 --MetaHaskell Extension add the constrs and the lower case case
424 -- guys as well (perhaps) e.g. see trueDataConName below
428 rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
429 runMainIOName = varQual pREL_TOP_HANDLER FSLIT("runMainIO") runMainKey
431 orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
433 eitherTyConName = tcQual pREL_EITHER FSLIT("Either") eitherTyConKey
434 leftDataConName = conName eitherTyConName FSLIT("Left") leftDataConKey
435 rightDataConName = conName eitherTyConName FSLIT("Right") rightDataConKey
438 crossTyConName = tcQual pREL_BASE FSLIT(":*:") crossTyConKey
439 plusTyConName = tcQual pREL_BASE FSLIT(":+:") plusTyConKey
440 genUnitTyConName = tcQual pREL_BASE FSLIT("Unit") genUnitTyConKey
442 -- Base strings Strings
443 unpackCStringName = varQual pREL_BASE FSLIT("unpackCString#") unpackCStringIdKey
444 unpackCStringAppendName = varQual pREL_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
445 unpackCStringFoldrName = varQual pREL_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
446 unpackCStringUtf8Name = varQual pREL_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
447 eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey
449 -- Base classes (Eq, Ord, Functor)
450 eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
451 eqName = methName eqClassName FSLIT("==") eqClassOpKey
452 ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
453 geName = methName ordClassName FSLIT(">=") geClassOpKey
454 functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey
457 monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
458 thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
459 bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
460 returnMName = methName monadClassName FSLIT("return") returnMClassOpKey
461 failMName = methName monadClassName FSLIT("fail") failMClassOpKey
463 -- Random PrelBase functions
464 otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey
465 foldrName = varQual pREL_BASE FSLIT("foldr") foldrIdKey
466 buildName = varQual pREL_BASE FSLIT("build") buildIdKey
467 augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey
468 appendName = varQual pREL_BASE FSLIT("++") appendIdKey
469 andName = varQual pREL_BASE FSLIT("&&") andIdKey
470 orName = varQual pREL_BASE FSLIT("||") orIdKey
471 assertName = varQual pREL_BASE FSLIT("assert") assertIdKey
474 fstName = varQual pREL_TUP FSLIT("fst") fstIdKey
475 sndName = varQual pREL_TUP FSLIT("snd") sndIdKey
478 numClassName = clsQual pREL_NUM FSLIT("Num") numClassKey
479 fromIntegerName = methName numClassName FSLIT("fromInteger") fromIntegerClassOpKey
480 minusName = methName numClassName FSLIT("-") minusClassOpKey
481 negateName = methName numClassName FSLIT("negate") negateClassOpKey
482 plusIntegerName = varQual pREL_NUM FSLIT("plusInteger") plusIntegerIdKey
483 timesIntegerName = varQual pREL_NUM FSLIT("timesInteger") timesIntegerIdKey
484 integerTyConName = tcQual pREL_NUM FSLIT("Integer") integerTyConKey
485 smallIntegerDataConName = conName integerTyConName FSLIT("S#") smallIntegerDataConKey
486 largeIntegerDataConName = conName integerTyConName FSLIT("J#") largeIntegerDataConKey
488 -- PrelReal types and classes
489 rationalTyConName = tcQual pREL_REAL FSLIT("Rational") rationalTyConKey
490 ratioTyConName = tcQual pREL_REAL FSLIT("Ratio") ratioTyConKey
491 ratioDataConName = conName ratioTyConName FSLIT(":%") ratioDataConKey
492 realClassName = clsQual pREL_REAL FSLIT("Real") realClassKey
493 integralClassName = clsQual pREL_REAL FSLIT("Integral") integralClassKey
494 realFracClassName = clsQual pREL_REAL FSLIT("RealFrac") realFracClassKey
495 fractionalClassName = clsQual pREL_REAL FSLIT("Fractional") fractionalClassKey
496 fromRationalName = methName fractionalClassName FSLIT("fromRational") fromRationalClassOpKey
499 floatingClassName = clsQual pREL_FLOAT FSLIT("Floating") floatingClassKey
500 realFloatClassName = clsQual pREL_FLOAT FSLIT("RealFloat") realFloatClassKey
503 ixClassName = clsQual pREL_ARR FSLIT("Ix") ixClassKey
506 typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
507 typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey
508 typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey
509 typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey
510 typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey
511 typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey
512 typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey
513 typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey
515 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
516 , typeable3ClassName, typeable4ClassName, typeable5ClassName
517 , typeable6ClassName, typeable7ClassName ]
520 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
523 assertErrorName = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey
525 -- Enum module (Enum, Bounded)
526 enumClassName = clsQual pREL_ENUM FSLIT("Enum") enumClassKey
527 enumFromName = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey
528 enumFromToName = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey
529 enumFromThenName = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey
530 enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey
531 boundedClassName = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey
534 concatName = varQual pREL_LIST FSLIT("concat") concatIdKey
535 filterName = varQual pREL_LIST FSLIT("filter") filterIdKey
536 zipName = varQual pREL_LIST FSLIT("zip") zipIdKey
539 showClassName = clsQual pREL_SHOW FSLIT("Show") showClassKey
542 readClassName = clsQual pREL_READ FSLIT("Read") readClassKey
544 -- parallel array types and functions
545 enumFromToPName = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey
546 enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
547 nullPName = varQual pREL_PARR FSLIT("nullP") nullPIdKey
548 lengthPName = varQual pREL_PARR FSLIT("lengthP") lengthPIdKey
549 replicatePName = varQual pREL_PARR FSLIT("replicateP") replicatePIdKey
550 mapPName = varQual pREL_PARR FSLIT("mapP") mapPIdKey
551 filterPName = varQual pREL_PARR FSLIT("filterP") filterPIdKey
552 zipPName = varQual pREL_PARR FSLIT("zipP") zipPIdKey
553 crossPName = varQual pREL_PARR FSLIT("crossP") crossPIdKey
554 indexPName = varQual pREL_PARR FSLIT("!:") indexPIdKey
555 toPName = varQual pREL_PARR FSLIT("toP") toPIdKey
556 bpermutePName = varQual pREL_PARR FSLIT("bpermuteP") bpermutePIdKey
557 bpermuteDftPName = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
558 indexOfPName = varQual pREL_PARR FSLIT("indexOfP") indexOfPIdKey
561 ioTyConName = tcQual pREL_IO_BASE FSLIT("IO") ioTyConKey
562 ioDataConName = conName ioTyConName FSLIT("IO") ioDataConKey
563 thenIOName = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey
564 bindIOName = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey
565 returnIOName = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey
566 failIOName = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey
569 printName = varQual sYSTEM_IO FSLIT("print") printIdKey
571 -- Int, Word, and Addr things
572 int8TyConName = tcQual pREL_INT FSLIT("Int8") int8TyConKey
573 int16TyConName = tcQual pREL_INT FSLIT("Int16") int16TyConKey
574 int32TyConName = tcQual pREL_INT FSLIT("Int32") int32TyConKey
575 int64TyConName = tcQual pREL_INT FSLIT("Int64") int64TyConKey
578 word8TyConName = tcQual pREL_WORD FSLIT("Word8") word8TyConKey
579 word16TyConName = tcQual pREL_WORD FSLIT("Word16") word16TyConKey
580 word32TyConName = tcQual pREL_WORD FSLIT("Word32") word32TyConKey
581 word64TyConName = tcQual pREL_WORD FSLIT("Word64") word64TyConKey
582 wordTyConName = tcQual pREL_WORD FSLIT("Word") wordTyConKey
583 wordDataConName = conName wordTyConName FSLIT("W#") wordDataConKey
586 addrTyConName = tcQual aDDR FSLIT("Addr") addrTyConKey
589 ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey
590 funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey
593 byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey
594 mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey
596 -- Foreign objects and weak pointers
597 stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
598 newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
601 runSTRepName = varQual pREL_ST FSLIT("runSTRep") runSTRepIdKey
603 -- The "split" Id for splittable implicit parameters
604 splitName = varQual gLA_EXTS FSLIT("split") splitIdKey
606 -- Recursive-do notation
607 mfixName = varQual mONAD_FIX FSLIT("mfix") mfixIdKey
610 arrAName = varQual aRROW FSLIT("arr") arrAIdKey
611 composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
612 firstAName = varQual aRROW FSLIT("first") firstAIdKey
613 appAName = varQual aRROW FSLIT("app") appAIdKey
614 choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
615 loopAName = varQual aRROW FSLIT("loop") loopAIdKey
618 objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
619 -- objectTyConName was "wTcQual", but that's gone now, and
620 -- I can't see why it was wired in anyway...
621 unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
622 marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey
623 marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey
624 unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
625 checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey
628 %************************************************************************
630 \subsection{Local helpers}
632 %************************************************************************
634 All these are original names; hence mkOrig
637 varQual = mk_known_key_name varName
638 tcQual = mk_known_key_name tcName
639 clsQual = mk_known_key_name clsName
641 mk_known_key_name space mod str uniq
642 = mkExternalName uniq mod (mkOccFS space str)
645 conName :: Name -> FastString -> Unique -> Name
646 conName tycon occ uniq
647 = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ)
648 (Just tycon) noSrcLoc
650 methName :: Name -> FastString -> Unique -> Name
651 methName cls occ uniq
652 = mkExternalName uniq (nameModule cls) (mkOccFS varName occ)
656 %************************************************************************
658 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
660 %************************************************************************
661 --MetaHaskell extension hand allocate keys here
664 boundedClassKey = mkPreludeClassUnique 1
665 enumClassKey = mkPreludeClassUnique 2
666 eqClassKey = mkPreludeClassUnique 3
667 floatingClassKey = mkPreludeClassUnique 5
668 fractionalClassKey = mkPreludeClassUnique 6
669 integralClassKey = mkPreludeClassUnique 7
670 monadClassKey = mkPreludeClassUnique 8
671 dataClassKey = mkPreludeClassUnique 9
672 functorClassKey = mkPreludeClassUnique 10
673 numClassKey = mkPreludeClassUnique 11
674 ordClassKey = mkPreludeClassUnique 12
675 readClassKey = mkPreludeClassUnique 13
676 realClassKey = mkPreludeClassUnique 14
677 realFloatClassKey = mkPreludeClassUnique 15
678 realFracClassKey = mkPreludeClassUnique 16
679 showClassKey = mkPreludeClassUnique 17
680 ixClassKey = mkPreludeClassUnique 18
682 typeableClassKey = mkPreludeClassUnique 20
683 typeable1ClassKey = mkPreludeClassUnique 21
684 typeable2ClassKey = mkPreludeClassUnique 22
685 typeable3ClassKey = mkPreludeClassUnique 23
686 typeable4ClassKey = mkPreludeClassUnique 24
687 typeable5ClassKey = mkPreludeClassUnique 25
688 typeable6ClassKey = mkPreludeClassUnique 26
689 typeable7ClassKey = mkPreludeClassUnique 27
692 %************************************************************************
694 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
696 %************************************************************************
699 addrPrimTyConKey = mkPreludeTyConUnique 1
700 addrTyConKey = mkPreludeTyConUnique 2
701 arrayPrimTyConKey = mkPreludeTyConUnique 3
702 boolTyConKey = mkPreludeTyConUnique 4
703 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
704 charPrimTyConKey = mkPreludeTyConUnique 7
705 charTyConKey = mkPreludeTyConUnique 8
706 doublePrimTyConKey = mkPreludeTyConUnique 9
707 doubleTyConKey = mkPreludeTyConUnique 10
708 floatPrimTyConKey = mkPreludeTyConUnique 11
709 floatTyConKey = mkPreludeTyConUnique 12
710 funTyConKey = mkPreludeTyConUnique 13
711 intPrimTyConKey = mkPreludeTyConUnique 14
712 intTyConKey = mkPreludeTyConUnique 15
713 int8TyConKey = mkPreludeTyConUnique 16
714 int16TyConKey = mkPreludeTyConUnique 17
715 int32PrimTyConKey = mkPreludeTyConUnique 18
716 int32TyConKey = mkPreludeTyConUnique 19
717 int64PrimTyConKey = mkPreludeTyConUnique 20
718 int64TyConKey = mkPreludeTyConUnique 21
719 integerTyConKey = mkPreludeTyConUnique 22
720 listTyConKey = mkPreludeTyConUnique 23
721 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
722 weakPrimTyConKey = mkPreludeTyConUnique 27
723 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
724 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
725 orderingTyConKey = mkPreludeTyConUnique 30
726 mVarPrimTyConKey = mkPreludeTyConUnique 31
727 ratioTyConKey = mkPreludeTyConUnique 32
728 rationalTyConKey = mkPreludeTyConUnique 33
729 realWorldTyConKey = mkPreludeTyConUnique 34
730 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
731 stablePtrTyConKey = mkPreludeTyConUnique 36
732 statePrimTyConKey = mkPreludeTyConUnique 50
733 stableNamePrimTyConKey = mkPreludeTyConUnique 51
734 stableNameTyConKey = mkPreludeTyConUnique 52
735 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
736 mutVarPrimTyConKey = mkPreludeTyConUnique 55
737 ioTyConKey = mkPreludeTyConUnique 56
738 byteArrayTyConKey = mkPreludeTyConUnique 57
739 wordPrimTyConKey = mkPreludeTyConUnique 58
740 wordTyConKey = mkPreludeTyConUnique 59
741 word8TyConKey = mkPreludeTyConUnique 60
742 word16TyConKey = mkPreludeTyConUnique 61
743 word32PrimTyConKey = mkPreludeTyConUnique 62
744 word32TyConKey = mkPreludeTyConUnique 63
745 word64PrimTyConKey = mkPreludeTyConUnique 64
746 word64TyConKey = mkPreludeTyConUnique 65
747 liftedConKey = mkPreludeTyConUnique 66
748 unliftedConKey = mkPreludeTyConUnique 67
749 anyBoxConKey = mkPreludeTyConUnique 68
750 kindConKey = mkPreludeTyConUnique 69
751 boxityConKey = mkPreludeTyConUnique 70
752 typeConKey = mkPreludeTyConUnique 71
753 threadIdPrimTyConKey = mkPreludeTyConUnique 72
754 bcoPrimTyConKey = mkPreludeTyConUnique 73
755 ptrTyConKey = mkPreludeTyConUnique 74
756 funPtrTyConKey = mkPreludeTyConUnique 75
757 tVarPrimTyConKey = mkPreludeTyConUnique 76
759 -- Generic Type Constructors
760 crossTyConKey = mkPreludeTyConUnique 79
761 plusTyConKey = mkPreludeTyConUnique 80
762 genUnitTyConKey = mkPreludeTyConUnique 81
764 -- Parallel array type constructor
765 parrTyConKey = mkPreludeTyConUnique 82
768 objectTyConKey = mkPreludeTyConUnique 83
770 eitherTyConKey = mkPreludeTyConUnique 84
772 ---------------- Template Haskell -------------------
773 -- USES TyConUniques 100-129
774 -----------------------------------------------------
776 unitTyConKey = mkTupleTyConUnique Boxed 0
779 %************************************************************************
781 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
783 %************************************************************************
786 charDataConKey = mkPreludeDataConUnique 1
787 consDataConKey = mkPreludeDataConUnique 2
788 doubleDataConKey = mkPreludeDataConUnique 3
789 falseDataConKey = mkPreludeDataConUnique 4
790 floatDataConKey = mkPreludeDataConUnique 5
791 intDataConKey = mkPreludeDataConUnique 6
792 smallIntegerDataConKey = mkPreludeDataConUnique 7
793 largeIntegerDataConKey = mkPreludeDataConUnique 8
794 nilDataConKey = mkPreludeDataConUnique 11
795 ratioDataConKey = mkPreludeDataConUnique 12
796 stableNameDataConKey = mkPreludeDataConUnique 14
797 trueDataConKey = mkPreludeDataConUnique 15
798 wordDataConKey = mkPreludeDataConUnique 16
799 ioDataConKey = mkPreludeDataConUnique 17
801 -- Generic data constructors
802 crossDataConKey = mkPreludeDataConUnique 20
803 inlDataConKey = mkPreludeDataConUnique 21
804 inrDataConKey = mkPreludeDataConUnique 22
805 genUnitDataConKey = mkPreludeDataConUnique 23
807 -- Data constructor for parallel arrays
808 parrDataConKey = mkPreludeDataConUnique 24
810 leftDataConKey = mkPreludeDataConUnique 25
811 rightDataConKey = mkPreludeDataConUnique 26
814 %************************************************************************
816 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
818 %************************************************************************
821 absentErrorIdKey = mkPreludeMiscIdUnique 1
822 augmentIdKey = mkPreludeMiscIdUnique 3
823 appendIdKey = mkPreludeMiscIdUnique 4
824 buildIdKey = mkPreludeMiscIdUnique 5
825 errorIdKey = mkPreludeMiscIdUnique 6
826 foldlIdKey = mkPreludeMiscIdUnique 7
827 foldrIdKey = mkPreludeMiscIdUnique 8
828 recSelErrorIdKey = mkPreludeMiscIdUnique 9
829 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
830 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
831 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
832 integerZeroIdKey = mkPreludeMiscIdUnique 13
833 int2IntegerIdKey = mkPreludeMiscIdUnique 14
834 seqIdKey = mkPreludeMiscIdUnique 15
835 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
836 eqStringIdKey = mkPreludeMiscIdUnique 17
837 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
838 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
839 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
840 parErrorIdKey = mkPreludeMiscIdUnique 21
841 parIdKey = mkPreludeMiscIdUnique 22
842 patErrorIdKey = mkPreludeMiscIdUnique 23
843 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
844 recConErrorIdKey = mkPreludeMiscIdUnique 25
845 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
846 traceIdKey = mkPreludeMiscIdUnique 27
847 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
848 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
849 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
850 unpackCStringIdKey = mkPreludeMiscIdUnique 31
852 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
853 concatIdKey = mkPreludeMiscIdUnique 33
854 filterIdKey = mkPreludeMiscIdUnique 34
855 zipIdKey = mkPreludeMiscIdUnique 35
856 bindIOIdKey = mkPreludeMiscIdUnique 36
857 returnIOIdKey = mkPreludeMiscIdUnique 37
858 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
859 newStablePtrIdKey = mkPreludeMiscIdUnique 39
860 plusIntegerIdKey = mkPreludeMiscIdUnique 41
861 timesIntegerIdKey = mkPreludeMiscIdUnique 42
862 printIdKey = mkPreludeMiscIdUnique 43
863 failIOIdKey = mkPreludeMiscIdUnique 44
864 nullAddrIdKey = mkPreludeMiscIdUnique 46
865 voidArgIdKey = mkPreludeMiscIdUnique 47
866 splitIdKey = mkPreludeMiscIdUnique 48
867 fstIdKey = mkPreludeMiscIdUnique 49
868 sndIdKey = mkPreludeMiscIdUnique 50
869 otherwiseIdKey = mkPreludeMiscIdUnique 51
870 assertIdKey = mkPreludeMiscIdUnique 53
871 runSTRepIdKey = mkPreludeMiscIdUnique 54
873 rootMainKey = mkPreludeMiscIdUnique 55
874 runMainKey = mkPreludeMiscIdUnique 56
876 andIdKey = mkPreludeMiscIdUnique 57
877 orIdKey = mkPreludeMiscIdUnique 58
878 thenIOIdKey = mkPreludeMiscIdUnique 59
879 lazyIdKey = mkPreludeMiscIdUnique 60
880 assertErrorIdKey = mkPreludeMiscIdUnique 61
882 -- Parallel array functions
883 nullPIdKey = mkPreludeMiscIdUnique 80
884 lengthPIdKey = mkPreludeMiscIdUnique 81
885 replicatePIdKey = mkPreludeMiscIdUnique 82
886 mapPIdKey = mkPreludeMiscIdUnique 83
887 filterPIdKey = mkPreludeMiscIdUnique 84
888 zipPIdKey = mkPreludeMiscIdUnique 85
889 crossPIdKey = mkPreludeMiscIdUnique 86
890 indexPIdKey = mkPreludeMiscIdUnique 87
891 toPIdKey = mkPreludeMiscIdUnique 88
892 enumFromToPIdKey = mkPreludeMiscIdUnique 89
893 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
894 bpermutePIdKey = mkPreludeMiscIdUnique 91
895 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
896 indexOfPIdKey = mkPreludeMiscIdUnique 93
899 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
900 marshalObjectIdKey = mkPreludeMiscIdUnique 95
901 marshalStringIdKey = mkPreludeMiscIdUnique 96
902 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
903 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
907 Certain class operations from Prelude classes. They get their own
908 uniques so we can look them up easily when we want to conjure them up
909 during type checking.
912 -- Just a place holder for unbound variables produced by the renamer:
913 unboundKey = mkPreludeMiscIdUnique 101
915 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
916 minusClassOpKey = mkPreludeMiscIdUnique 103
917 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
918 enumFromClassOpKey = mkPreludeMiscIdUnique 105
919 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
920 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
921 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
922 eqClassOpKey = mkPreludeMiscIdUnique 109
923 geClassOpKey = mkPreludeMiscIdUnique 110
924 negateClassOpKey = mkPreludeMiscIdUnique 111
925 failMClassOpKey = mkPreludeMiscIdUnique 112
926 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
927 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
928 returnMClassOpKey = mkPreludeMiscIdUnique 117
930 -- Recursive do notation
931 mfixIdKey = mkPreludeMiscIdUnique 118
934 arrAIdKey = mkPreludeMiscIdUnique 119
935 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
936 firstAIdKey = mkPreludeMiscIdUnique 121
937 appAIdKey = mkPreludeMiscIdUnique 122
938 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
939 loopAIdKey = mkPreludeMiscIdUnique 124
941 ---------------- Template Haskell -------------------
942 -- USES IdUniques 200-399
943 -----------------------------------------------------
947 %************************************************************************
949 \subsection{Standard groups of types}
951 %************************************************************************
963 -- Renamer always imports these data decls replete with constructors
964 -- so that desugarer can always see their constructors. Ugh!
969 , mutableByteArrayTyConKey
983 %************************************************************************
985 \subsection[Class-std-groups]{Standard groups of Prelude classes}
987 %************************************************************************
989 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
990 even though every numeric class has these two as a superclass,
991 because the list of ambiguous dictionaries hasn't been simplified.
999 ++ fractionalClassKeys
1001 fractionalClassKeys =
1002 [ fractionalClassKey
1008 -- the strictness analyser needs to know about numeric types
1009 -- (see SaAbsInt.lhs)
1010 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1014 standardClassKeys = derivableClassKeys ++ numericClassKeys
1016 noDictClassKeys = [] -- ToDo: remove?
1019 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1024 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1025 boundedClassKey, showClassKey, readClassKey ]