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