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{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_Name = mkModuleName "Prelude"
222 gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values
223 pREL_BASE_Name = mkModuleName "GHC.Base"
224 pREL_ENUM_Name = mkModuleName "GHC.Enum"
225 pREL_SHOW_Name = mkModuleName "GHC.Show"
226 pREL_READ_Name = mkModuleName "GHC.Read"
227 pREL_NUM_Name = mkModuleName "GHC.Num"
228 pREL_LIST_Name = mkModuleName "GHC.List"
229 pREL_PARR_Name = mkModuleName "GHC.PArr"
230 pREL_TUP_Name = mkModuleName "Data.Tuple"
231 pREL_EITHER_Name = mkModuleName "Data.Either"
232 pREL_PACK_Name = mkModuleName "GHC.Pack"
233 pREL_CONC_Name = mkModuleName "GHC.Conc"
234 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
235 pREL_ST_Name = mkModuleName "GHC.ST"
236 pREL_ARR_Name = mkModuleName "GHC.Arr"
237 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
238 pREL_STABLE_Name = mkModuleName "GHC.Stable"
239 pREL_ADDR_Name = mkModuleName "GHC.Addr"
240 pREL_PTR_Name = mkModuleName "GHC.Ptr"
241 pREL_ERR_Name = mkModuleName "GHC.Err"
242 pREL_REAL_Name = mkModuleName "GHC.Real"
243 pREL_FLOAT_Name = mkModuleName "GHC.Float"
244 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
245 sYSTEM_IO_Name = mkModuleName "System.IO"
246 dYNAMIC_Name = mkModuleName "Data.Dynamic"
247 tYPEABLE_Name = mkModuleName "Data.Typeable"
248 gENERICS_Name = mkModuleName "Data.Generics.Basics"
249 dOTNET_Name = mkModuleName "GHC.Dotnet"
251 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
252 lEX_Name = mkModuleName "Text.Read.Lex"
254 mAIN_Name = mkModuleName "Main"
255 pREL_INT_Name = mkModuleName "GHC.Int"
256 pREL_WORD_Name = mkModuleName "GHC.Word"
257 mONAD_FIX_Name = mkModuleName "Control.Monad.Fix"
258 aRROW_Name = mkModuleName "Control.Arrow"
259 aDDR_Name = mkModuleName "Addr"
261 gLA_EXTS_Name = mkModuleName "GHC.Exts"
263 gHC_PRIM = mkBasePkgModule gHC_PRIM_Name
264 pREL_BASE = mkBasePkgModule pREL_BASE_Name
265 pREL_TUP = mkBasePkgModule pREL_TUP_Name
266 pREL_EITHER = mkBasePkgModule pREL_EITHER_Name
267 pREL_LIST = mkBasePkgModule pREL_LIST_Name
268 pREL_SHOW = mkBasePkgModule pREL_SHOW_Name
269 pREL_READ = mkBasePkgModule pREL_READ_Name
270 pREL_ADDR = mkBasePkgModule pREL_ADDR_Name
271 pREL_WORD = mkBasePkgModule pREL_WORD_Name
272 pREL_INT = mkBasePkgModule pREL_INT_Name
273 pREL_PTR = mkBasePkgModule pREL_PTR_Name
274 pREL_ST = mkBasePkgModule pREL_ST_Name
275 pREL_STABLE = mkBasePkgModule pREL_STABLE_Name
276 pREL_IO_BASE = mkBasePkgModule pREL_IO_BASE_Name
277 pREL_PACK = mkBasePkgModule pREL_PACK_Name
278 pREL_ERR = mkBasePkgModule pREL_ERR_Name
279 pREL_NUM = mkBasePkgModule pREL_NUM_Name
280 pREL_ENUM = mkBasePkgModule pREL_ENUM_Name
281 pREL_REAL = mkBasePkgModule pREL_REAL_Name
282 pREL_FLOAT = mkBasePkgModule pREL_FLOAT_Name
283 pREL_ARR = mkBasePkgModule pREL_ARR_Name
284 pREL_PARR = mkBasePkgModule pREL_PARR_Name
285 pREL_BYTEARR = mkBasePkgModule pREL_BYTEARR_Name
286 pREL_TOP_HANDLER= mkBasePkgModule pREL_TOP_HANDLER_Name
287 pRELUDE = mkBasePkgModule pRELUDE_Name
288 sYSTEM_IO = mkBasePkgModule sYSTEM_IO_Name
289 aDDR = mkBasePkgModule aDDR_Name
290 aRROW = mkBasePkgModule aRROW_Name
291 gENERICS = mkBasePkgModule gENERICS_Name
292 tYPEABLE = mkBasePkgModule tYPEABLE_Name
293 dOTNET = mkBasePkgModule dOTNET_Name
294 gLA_EXTS = mkBasePkgModule gLA_EXTS_Name
295 mONAD_FIX = mkBasePkgModule mONAD_FIX_Name
297 rOOT_MAIN_Name = mkModuleName ":Main" -- Root module for initialisation
298 rOOT_MAIN = mkHomeModule rOOT_MAIN_Name
299 -- The ':xxx' makes a moudle name that the user can never
300 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
301 -- module name still starts with a capital letter, which keeps
302 -- the z-encoded version consistent.
303 iNTERACTIVE = mkHomeModule (mkModuleName ":Interactive")
306 %************************************************************************
308 \subsection{Constructing the names of tuples
310 %************************************************************************
313 mkTupleModule :: Boxity -> Arity -> Module
314 mkTupleModule Boxed 0 = pREL_BASE
315 mkTupleModule Boxed _ = pREL_TUP
316 mkTupleModule Unboxed _ = gHC_PRIM
320 %************************************************************************
324 %************************************************************************
327 main_RDR_Unqual = mkUnqual varName FSLIT("main")
328 -- We definitely don't want an Orig RdrName, because
329 -- main might, in principle, be imported into module Main
331 eq_RDR = nameRdrName eqName
332 ge_RDR = nameRdrName geName
333 ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=")
334 le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=")
335 gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">")
336 compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare")
337 ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT")
338 eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
339 gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT")
341 eqClass_RDR = nameRdrName eqClassName
342 numClass_RDR = nameRdrName numClassName
343 ordClass_RDR = nameRdrName ordClassName
344 enumClass_RDR = nameRdrName enumClassName
345 monadClass_RDR = nameRdrName monadClassName
347 map_RDR = varQual_RDR pREL_BASE_Name FSLIT("map")
348 append_RDR = varQual_RDR pREL_BASE_Name FSLIT("++")
350 foldr_RDR = nameRdrName foldrName
351 build_RDR = nameRdrName buildName
352 returnM_RDR = nameRdrName returnMName
353 bindM_RDR = nameRdrName bindMName
354 failM_RDR = nameRdrName failMName
356 and_RDR = nameRdrName andName
358 left_RDR = nameRdrName leftDataConName
359 right_RDR = nameRdrName rightDataConName
361 fromEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("fromEnum")
362 toEnum_RDR = varQual_RDR pREL_ENUM_Name FSLIT("toEnum")
364 enumFrom_RDR = nameRdrName enumFromName
365 enumFromTo_RDR = nameRdrName enumFromToName
366 enumFromThen_RDR = nameRdrName enumFromThenName
367 enumFromThenTo_RDR = nameRdrName enumFromThenToName
369 ratioDataCon_RDR = nameRdrName ratioDataConName
370 plusInteger_RDR = nameRdrName plusIntegerName
371 timesInteger_RDR = nameRdrName timesIntegerName
373 ioDataCon_RDR = nameRdrName ioDataConName
375 eqString_RDR = nameRdrName eqStringName
376 unpackCString_RDR = nameRdrName unpackCStringName
377 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
378 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
380 newStablePtr_RDR = nameRdrName newStablePtrName
381 addrDataCon_RDR = dataQual_RDR aDDR_Name FSLIT("A#")
382 wordDataCon_RDR = dataQual_RDR pREL_WORD_Name FSLIT("W#")
384 bindIO_RDR = nameRdrName bindIOName
385 returnIO_RDR = nameRdrName returnIOName
387 fromInteger_RDR = nameRdrName fromIntegerName
388 fromRational_RDR = nameRdrName fromRationalName
389 minus_RDR = nameRdrName minusName
390 times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*")
391 plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+")
393 compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".")
395 not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not")
396 getTag_RDR = varQual_RDR pREL_BASE_Name FSLIT("getTag")
397 succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ")
398 pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred")
399 minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
400 maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
401 range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range")
402 inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange")
403 index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index")
405 readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList")
406 readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault")
407 readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec")
408 readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault")
409 readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec")
410 parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens")
411 choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose")
412 lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP")
414 punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc")
415 ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident")
416 symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol")
418 step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step")
419 alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++")
420 reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset")
421 prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec")
423 showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList")
424 showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
425 showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
426 showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString")
427 showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace")
428 showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen")
430 typeOf_RDR = varQual_RDR tYPEABLE_Name FSLIT("typeOf")
431 mkTypeRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkTyConApp")
432 mkTyConRep_RDR = varQual_RDR tYPEABLE_Name FSLIT("mkTyCon")
434 undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined")
436 crossDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT(":*:")
437 inlDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inl")
438 inrDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Inr")
439 genUnitDataCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("Unit")
441 ----------------------
442 varQual_RDR mod str = mkOrig mod (mkOccFS varName str)
443 tcQual_RDR mod str = mkOrig mod (mkOccFS tcName str)
444 clsQual_RDR mod str = mkOrig mod (mkOccFS clsName str)
445 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
448 %************************************************************************
450 \subsection{Known-key names}
452 %************************************************************************
454 Many of these Names are not really "built in", but some parts of the
455 compiler (notably the deriving mechanism) need to mention their names,
456 and it's convenient to write them all down in one place.
458 --MetaHaskell Extension add the constrs and the lower case case
459 -- guys as well (perhaps) e.g. see trueDataConName below
463 rootMainName = varQual rOOT_MAIN FSLIT("main") rootMainKey
464 runIOName = varQual pREL_TOP_HANDLER FSLIT("runIO") runMainKey
466 orderingTyConName = tcQual pREL_BASE FSLIT("Ordering") orderingTyConKey
468 eitherTyConName = tcQual pREL_EITHER FSLIT("Either") eitherTyConKey
469 leftDataConName = conName eitherTyConName FSLIT("Left") leftDataConKey
470 rightDataConName = conName eitherTyConName FSLIT("Right") rightDataConKey
473 crossTyConName = tcQual pREL_BASE FSLIT(":*:") crossTyConKey
474 plusTyConName = tcQual pREL_BASE FSLIT(":+:") plusTyConKey
475 genUnitTyConName = tcQual pREL_BASE FSLIT("Unit") genUnitTyConKey
477 -- Base strings Strings
478 unpackCStringName = varQual pREL_BASE FSLIT("unpackCString#") unpackCStringIdKey
479 unpackCStringAppendName = varQual pREL_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
480 unpackCStringFoldrName = varQual pREL_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
481 unpackCStringUtf8Name = varQual pREL_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
482 eqStringName = varQual pREL_BASE FSLIT("eqString") eqStringIdKey
484 -- Base classes (Eq, Ord, Functor)
485 eqClassName = clsQual pREL_BASE FSLIT("Eq") eqClassKey
486 eqName = methName eqClassName FSLIT("==") eqClassOpKey
487 ordClassName = clsQual pREL_BASE FSLIT("Ord") ordClassKey
488 geName = methName ordClassName FSLIT(">=") geClassOpKey
489 functorClassName = clsQual pREL_BASE FSLIT("Functor") functorClassKey
492 monadClassName = clsQual pREL_BASE FSLIT("Monad") monadClassKey
493 thenMName = methName monadClassName FSLIT(">>") thenMClassOpKey
494 bindMName = methName monadClassName FSLIT(">>=") bindMClassOpKey
495 returnMName = methName monadClassName FSLIT("return") returnMClassOpKey
496 failMName = methName monadClassName FSLIT("fail") failMClassOpKey
498 -- Random PrelBase functions
499 otherwiseIdName = varQual pREL_BASE FSLIT("otherwise") otherwiseIdKey
500 foldrName = varQual pREL_BASE FSLIT("foldr") foldrIdKey
501 buildName = varQual pREL_BASE FSLIT("build") buildIdKey
502 augmentName = varQual pREL_BASE FSLIT("augment") augmentIdKey
503 appendName = varQual pREL_BASE FSLIT("++") appendIdKey
504 andName = varQual pREL_BASE FSLIT("&&") andIdKey
505 orName = varQual pREL_BASE FSLIT("||") orIdKey
506 assertName = varQual pREL_BASE FSLIT("assert") assertIdKey
509 fstName = varQual pREL_TUP FSLIT("fst") fstIdKey
510 sndName = varQual pREL_TUP FSLIT("snd") sndIdKey
513 numClassName = clsQual pREL_NUM FSLIT("Num") numClassKey
514 fromIntegerName = methName numClassName FSLIT("fromInteger") fromIntegerClassOpKey
515 minusName = methName numClassName FSLIT("-") minusClassOpKey
516 negateName = methName numClassName FSLIT("negate") negateClassOpKey
517 plusIntegerName = varQual pREL_NUM FSLIT("plusInteger") plusIntegerIdKey
518 timesIntegerName = varQual pREL_NUM FSLIT("timesInteger") timesIntegerIdKey
519 integerTyConName = tcQual pREL_NUM FSLIT("Integer") integerTyConKey
520 smallIntegerDataConName = conName integerTyConName FSLIT("S#") smallIntegerDataConKey
521 largeIntegerDataConName = conName integerTyConName FSLIT("J#") largeIntegerDataConKey
523 -- PrelReal types and classes
524 rationalTyConName = tcQual pREL_REAL FSLIT("Rational") rationalTyConKey
525 ratioTyConName = tcQual pREL_REAL FSLIT("Ratio") ratioTyConKey
526 ratioDataConName = conName ratioTyConName FSLIT(":%") ratioDataConKey
527 realClassName = clsQual pREL_REAL FSLIT("Real") realClassKey
528 integralClassName = clsQual pREL_REAL FSLIT("Integral") integralClassKey
529 realFracClassName = clsQual pREL_REAL FSLIT("RealFrac") realFracClassKey
530 fractionalClassName = clsQual pREL_REAL FSLIT("Fractional") fractionalClassKey
531 fromRationalName = methName fractionalClassName FSLIT("fromRational") fromRationalClassOpKey
534 floatingClassName = clsQual pREL_FLOAT FSLIT("Floating") floatingClassKey
535 realFloatClassName = clsQual pREL_FLOAT FSLIT("RealFloat") realFloatClassKey
538 ixClassName = clsQual pREL_ARR FSLIT("Ix") ixClassKey
541 typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
542 typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey
543 typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey
544 typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey
545 typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey
546 typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey
547 typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey
548 typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey
550 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
551 , typeable3ClassName, typeable4ClassName, typeable5ClassName
552 , typeable6ClassName, typeable7ClassName ]
555 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
558 assertErrorName = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey
560 -- Enum module (Enum, Bounded)
561 enumClassName = clsQual pREL_ENUM FSLIT("Enum") enumClassKey
562 enumFromName = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey
563 enumFromToName = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey
564 enumFromThenName = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey
565 enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey
566 boundedClassName = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey
569 concatName = varQual pREL_LIST FSLIT("concat") concatIdKey
570 filterName = varQual pREL_LIST FSLIT("filter") filterIdKey
571 zipName = varQual pREL_LIST FSLIT("zip") zipIdKey
574 showClassName = clsQual pREL_SHOW FSLIT("Show") showClassKey
577 readClassName = clsQual pREL_READ FSLIT("Read") readClassKey
579 -- parallel array types and functions
580 enumFromToPName = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey
581 enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
582 nullPName = varQual pREL_PARR FSLIT("nullP") nullPIdKey
583 lengthPName = varQual pREL_PARR FSLIT("lengthP") lengthPIdKey
584 replicatePName = varQual pREL_PARR FSLIT("replicateP") replicatePIdKey
585 mapPName = varQual pREL_PARR FSLIT("mapP") mapPIdKey
586 filterPName = varQual pREL_PARR FSLIT("filterP") filterPIdKey
587 zipPName = varQual pREL_PARR FSLIT("zipP") zipPIdKey
588 crossPName = varQual pREL_PARR FSLIT("crossP") crossPIdKey
589 indexPName = varQual pREL_PARR FSLIT("!:") indexPIdKey
590 toPName = varQual pREL_PARR FSLIT("toP") toPIdKey
591 bpermutePName = varQual pREL_PARR FSLIT("bpermuteP") bpermutePIdKey
592 bpermuteDftPName = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
593 indexOfPName = varQual pREL_PARR FSLIT("indexOfP") indexOfPIdKey
596 ioTyConName = tcQual pREL_IO_BASE FSLIT("IO") ioTyConKey
597 ioDataConName = conName ioTyConName FSLIT("IO") ioDataConKey
598 thenIOName = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey
599 bindIOName = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey
600 returnIOName = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey
601 failIOName = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey
604 printName = varQual sYSTEM_IO FSLIT("print") printIdKey
606 -- Int, Word, and Addr things
607 int8TyConName = tcQual pREL_INT FSLIT("Int8") int8TyConKey
608 int16TyConName = tcQual pREL_INT FSLIT("Int16") int16TyConKey
609 int32TyConName = tcQual pREL_INT FSLIT("Int32") int32TyConKey
610 int64TyConName = tcQual pREL_INT FSLIT("Int64") int64TyConKey
613 word8TyConName = tcQual pREL_WORD FSLIT("Word8") word8TyConKey
614 word16TyConName = tcQual pREL_WORD FSLIT("Word16") word16TyConKey
615 word32TyConName = tcQual pREL_WORD FSLIT("Word32") word32TyConKey
616 word64TyConName = tcQual pREL_WORD FSLIT("Word64") word64TyConKey
617 wordTyConName = tcQual pREL_WORD FSLIT("Word") wordTyConKey
618 wordDataConName = conName wordTyConName FSLIT("W#") wordDataConKey
621 addrTyConName = tcQual aDDR FSLIT("Addr") addrTyConKey
624 ptrTyConName = tcQual pREL_PTR FSLIT("Ptr") ptrTyConKey
625 funPtrTyConName = tcQual pREL_PTR FSLIT("FunPtr") funPtrTyConKey
628 byteArrayTyConName = tcQual pREL_BYTEARR FSLIT("ByteArray") byteArrayTyConKey
629 mutableByteArrayTyConName = tcQual pREL_BYTEARR FSLIT("MutableByteArray") mutableByteArrayTyConKey
631 -- Foreign objects and weak pointers
632 stablePtrTyConName = tcQual pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
633 newStablePtrName = varQual pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
636 runSTRepName = varQual pREL_ST FSLIT("runSTRep") runSTRepIdKey
638 -- The "split" Id for splittable implicit parameters
639 splitName = varQual gLA_EXTS FSLIT("split") splitIdKey
641 -- Recursive-do notation
642 mfixName = varQual mONAD_FIX FSLIT("mfix") mfixIdKey
645 arrAName = varQual aRROW FSLIT("arr") arrAIdKey
646 composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
647 firstAName = varQual aRROW FSLIT("first") firstAIdKey
648 appAName = varQual aRROW FSLIT("app") appAIdKey
649 choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
650 loopAName = varQual aRROW FSLIT("loop") loopAIdKey
653 objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
654 -- objectTyConName was "wTcQual", but that's gone now, and
655 -- I can't see why it was wired in anyway...
656 unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
657 marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey
658 marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey
659 unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
660 checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey
663 %************************************************************************
665 \subsection{Local helpers}
667 %************************************************************************
669 All these are original names; hence mkOrig
672 varQual = mk_known_key_name varName
673 tcQual = mk_known_key_name tcName
674 clsQual = mk_known_key_name clsName
676 mk_known_key_name space mod str uniq
677 = mkExternalName uniq mod (mkOccFS space str)
680 conName :: Name -> FastString -> Unique -> Name
681 conName tycon occ uniq
682 = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ)
683 (Just tycon) noSrcLoc
685 methName :: Name -> FastString -> Unique -> Name
686 methName cls occ uniq
687 = mkExternalName uniq (nameModule cls) (mkOccFS varName occ)
691 %************************************************************************
693 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
695 %************************************************************************
696 --MetaHaskell extension hand allocate keys here
699 boundedClassKey = mkPreludeClassUnique 1
700 enumClassKey = mkPreludeClassUnique 2
701 eqClassKey = mkPreludeClassUnique 3
702 floatingClassKey = mkPreludeClassUnique 5
703 fractionalClassKey = mkPreludeClassUnique 6
704 integralClassKey = mkPreludeClassUnique 7
705 monadClassKey = mkPreludeClassUnique 8
706 dataClassKey = mkPreludeClassUnique 9
707 functorClassKey = mkPreludeClassUnique 10
708 numClassKey = mkPreludeClassUnique 11
709 ordClassKey = mkPreludeClassUnique 12
710 readClassKey = mkPreludeClassUnique 13
711 realClassKey = mkPreludeClassUnique 14
712 realFloatClassKey = mkPreludeClassUnique 15
713 realFracClassKey = mkPreludeClassUnique 16
714 showClassKey = mkPreludeClassUnique 17
715 ixClassKey = mkPreludeClassUnique 18
717 typeableClassKey = mkPreludeClassUnique 20
718 typeable1ClassKey = mkPreludeClassUnique 21
719 typeable2ClassKey = mkPreludeClassUnique 22
720 typeable3ClassKey = mkPreludeClassUnique 23
721 typeable4ClassKey = mkPreludeClassUnique 24
722 typeable5ClassKey = mkPreludeClassUnique 25
723 typeable6ClassKey = mkPreludeClassUnique 26
724 typeable7ClassKey = mkPreludeClassUnique 27
727 %************************************************************************
729 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
731 %************************************************************************
734 addrPrimTyConKey = mkPreludeTyConUnique 1
735 addrTyConKey = mkPreludeTyConUnique 2
736 arrayPrimTyConKey = mkPreludeTyConUnique 3
737 boolTyConKey = mkPreludeTyConUnique 4
738 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
739 charPrimTyConKey = mkPreludeTyConUnique 7
740 charTyConKey = mkPreludeTyConUnique 8
741 doublePrimTyConKey = mkPreludeTyConUnique 9
742 doubleTyConKey = mkPreludeTyConUnique 10
743 floatPrimTyConKey = mkPreludeTyConUnique 11
744 floatTyConKey = mkPreludeTyConUnique 12
745 funTyConKey = mkPreludeTyConUnique 13
746 intPrimTyConKey = mkPreludeTyConUnique 14
747 intTyConKey = mkPreludeTyConUnique 15
748 int8TyConKey = mkPreludeTyConUnique 16
749 int16TyConKey = mkPreludeTyConUnique 17
750 int32PrimTyConKey = mkPreludeTyConUnique 18
751 int32TyConKey = mkPreludeTyConUnique 19
752 int64PrimTyConKey = mkPreludeTyConUnique 20
753 int64TyConKey = mkPreludeTyConUnique 21
754 integerTyConKey = mkPreludeTyConUnique 22
755 listTyConKey = mkPreludeTyConUnique 23
756 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
757 weakPrimTyConKey = mkPreludeTyConUnique 27
758 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
759 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
760 orderingTyConKey = mkPreludeTyConUnique 30
761 mVarPrimTyConKey = mkPreludeTyConUnique 31
762 ratioTyConKey = mkPreludeTyConUnique 32
763 rationalTyConKey = mkPreludeTyConUnique 33
764 realWorldTyConKey = mkPreludeTyConUnique 34
765 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
766 stablePtrTyConKey = mkPreludeTyConUnique 36
767 statePrimTyConKey = mkPreludeTyConUnique 50
768 stableNamePrimTyConKey = mkPreludeTyConUnique 51
769 stableNameTyConKey = mkPreludeTyConUnique 52
770 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
771 mutVarPrimTyConKey = mkPreludeTyConUnique 55
772 ioTyConKey = mkPreludeTyConUnique 56
773 byteArrayTyConKey = mkPreludeTyConUnique 57
774 wordPrimTyConKey = mkPreludeTyConUnique 58
775 wordTyConKey = mkPreludeTyConUnique 59
776 word8TyConKey = mkPreludeTyConUnique 60
777 word16TyConKey = mkPreludeTyConUnique 61
778 word32PrimTyConKey = mkPreludeTyConUnique 62
779 word32TyConKey = mkPreludeTyConUnique 63
780 word64PrimTyConKey = mkPreludeTyConUnique 64
781 word64TyConKey = mkPreludeTyConUnique 65
782 liftedConKey = mkPreludeTyConUnique 66
783 unliftedConKey = mkPreludeTyConUnique 67
784 anyBoxConKey = mkPreludeTyConUnique 68
785 kindConKey = mkPreludeTyConUnique 69
786 boxityConKey = mkPreludeTyConUnique 70
787 typeConKey = mkPreludeTyConUnique 71
788 threadIdPrimTyConKey = mkPreludeTyConUnique 72
789 bcoPrimTyConKey = mkPreludeTyConUnique 73
790 ptrTyConKey = mkPreludeTyConUnique 74
791 funPtrTyConKey = mkPreludeTyConUnique 75
793 -- Generic Type Constructors
794 crossTyConKey = mkPreludeTyConUnique 79
795 plusTyConKey = mkPreludeTyConUnique 80
796 genUnitTyConKey = mkPreludeTyConUnique 81
798 -- Parallel array type constructor
799 parrTyConKey = mkPreludeTyConUnique 82
802 objectTyConKey = mkPreludeTyConUnique 83
804 eitherTyConKey = mkPreludeTyConUnique 84
806 ---------------- Template Haskell -------------------
807 -- USES TyConUniques 100-129
808 -----------------------------------------------------
810 unitTyConKey = mkTupleTyConUnique Boxed 0
813 %************************************************************************
815 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
817 %************************************************************************
820 charDataConKey = mkPreludeDataConUnique 1
821 consDataConKey = mkPreludeDataConUnique 2
822 doubleDataConKey = mkPreludeDataConUnique 3
823 falseDataConKey = mkPreludeDataConUnique 4
824 floatDataConKey = mkPreludeDataConUnique 5
825 intDataConKey = mkPreludeDataConUnique 6
826 smallIntegerDataConKey = mkPreludeDataConUnique 7
827 largeIntegerDataConKey = mkPreludeDataConUnique 8
828 nilDataConKey = mkPreludeDataConUnique 11
829 ratioDataConKey = mkPreludeDataConUnique 12
830 stableNameDataConKey = mkPreludeDataConUnique 14
831 trueDataConKey = mkPreludeDataConUnique 15
832 wordDataConKey = mkPreludeDataConUnique 16
833 ioDataConKey = mkPreludeDataConUnique 17
835 -- Generic data constructors
836 crossDataConKey = mkPreludeDataConUnique 20
837 inlDataConKey = mkPreludeDataConUnique 21
838 inrDataConKey = mkPreludeDataConUnique 22
839 genUnitDataConKey = mkPreludeDataConUnique 23
841 -- Data constructor for parallel arrays
842 parrDataConKey = mkPreludeDataConUnique 24
844 leftDataConKey = mkPreludeDataConUnique 25
845 rightDataConKey = mkPreludeDataConUnique 26
848 %************************************************************************
850 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
852 %************************************************************************
855 absentErrorIdKey = mkPreludeMiscIdUnique 1
856 augmentIdKey = mkPreludeMiscIdUnique 3
857 appendIdKey = mkPreludeMiscIdUnique 4
858 buildIdKey = mkPreludeMiscIdUnique 5
859 errorIdKey = mkPreludeMiscIdUnique 6
860 foldlIdKey = mkPreludeMiscIdUnique 7
861 foldrIdKey = mkPreludeMiscIdUnique 8
862 recSelErrorIdKey = mkPreludeMiscIdUnique 9
863 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
864 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
865 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
866 integerZeroIdKey = mkPreludeMiscIdUnique 13
867 int2IntegerIdKey = mkPreludeMiscIdUnique 14
868 seqIdKey = mkPreludeMiscIdUnique 15
869 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
870 eqStringIdKey = mkPreludeMiscIdUnique 17
871 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
872 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
873 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
874 parErrorIdKey = mkPreludeMiscIdUnique 21
875 parIdKey = mkPreludeMiscIdUnique 22
876 patErrorIdKey = mkPreludeMiscIdUnique 23
877 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
878 recConErrorIdKey = mkPreludeMiscIdUnique 25
879 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
880 traceIdKey = mkPreludeMiscIdUnique 27
881 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
882 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
883 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
884 unpackCStringIdKey = mkPreludeMiscIdUnique 31
886 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
887 concatIdKey = mkPreludeMiscIdUnique 33
888 filterIdKey = mkPreludeMiscIdUnique 34
889 zipIdKey = mkPreludeMiscIdUnique 35
890 bindIOIdKey = mkPreludeMiscIdUnique 36
891 returnIOIdKey = mkPreludeMiscIdUnique 37
892 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
893 newStablePtrIdKey = mkPreludeMiscIdUnique 39
894 plusIntegerIdKey = mkPreludeMiscIdUnique 41
895 timesIntegerIdKey = mkPreludeMiscIdUnique 42
896 printIdKey = mkPreludeMiscIdUnique 43
897 failIOIdKey = mkPreludeMiscIdUnique 44
898 nullAddrIdKey = mkPreludeMiscIdUnique 46
899 voidArgIdKey = mkPreludeMiscIdUnique 47
900 splitIdKey = mkPreludeMiscIdUnique 48
901 fstIdKey = mkPreludeMiscIdUnique 49
902 sndIdKey = mkPreludeMiscIdUnique 50
903 otherwiseIdKey = mkPreludeMiscIdUnique 51
904 assertIdKey = mkPreludeMiscIdUnique 53
905 runSTRepIdKey = mkPreludeMiscIdUnique 54
907 rootMainKey = mkPreludeMiscIdUnique 55
908 runMainKey = mkPreludeMiscIdUnique 56
910 andIdKey = mkPreludeMiscIdUnique 57
911 orIdKey = mkPreludeMiscIdUnique 58
912 thenIOIdKey = mkPreludeMiscIdUnique 59
913 lazyIdKey = mkPreludeMiscIdUnique 60
914 assertErrorIdKey = mkPreludeMiscIdUnique 61
916 -- Parallel array functions
917 nullPIdKey = mkPreludeMiscIdUnique 80
918 lengthPIdKey = mkPreludeMiscIdUnique 81
919 replicatePIdKey = mkPreludeMiscIdUnique 82
920 mapPIdKey = mkPreludeMiscIdUnique 83
921 filterPIdKey = mkPreludeMiscIdUnique 84
922 zipPIdKey = mkPreludeMiscIdUnique 85
923 crossPIdKey = mkPreludeMiscIdUnique 86
924 indexPIdKey = mkPreludeMiscIdUnique 87
925 toPIdKey = mkPreludeMiscIdUnique 88
926 enumFromToPIdKey = mkPreludeMiscIdUnique 89
927 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
928 bpermutePIdKey = mkPreludeMiscIdUnique 91
929 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
930 indexOfPIdKey = mkPreludeMiscIdUnique 93
933 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
934 marshalObjectIdKey = mkPreludeMiscIdUnique 95
935 marshalStringIdKey = mkPreludeMiscIdUnique 96
936 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
937 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
941 Certain class operations from Prelude classes. They get their own
942 uniques so we can look them up easily when we want to conjure them up
943 during type checking.
946 -- Just a place holder for unbound variables produced by the renamer:
947 unboundKey = mkPreludeMiscIdUnique 101
949 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
950 minusClassOpKey = mkPreludeMiscIdUnique 103
951 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
952 enumFromClassOpKey = mkPreludeMiscIdUnique 105
953 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
954 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
955 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
956 eqClassOpKey = mkPreludeMiscIdUnique 109
957 geClassOpKey = mkPreludeMiscIdUnique 110
958 negateClassOpKey = mkPreludeMiscIdUnique 111
959 failMClassOpKey = mkPreludeMiscIdUnique 112
960 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
961 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
962 returnMClassOpKey = mkPreludeMiscIdUnique 117
964 -- Recursive do notation
965 mfixIdKey = mkPreludeMiscIdUnique 118
968 arrAIdKey = mkPreludeMiscIdUnique 119
969 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
970 firstAIdKey = mkPreludeMiscIdUnique 121
971 appAIdKey = mkPreludeMiscIdUnique 122
972 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
973 loopAIdKey = mkPreludeMiscIdUnique 124
975 ---------------- Template Haskell -------------------
976 -- USES IdUniques 200-399
977 -----------------------------------------------------
981 %************************************************************************
983 \subsection{Standard groups of types}
985 %************************************************************************
997 -- Renamer always imports these data decls replete with constructors
998 -- so that desugarer can always see their constructors. Ugh!
1003 , mutableByteArrayTyConKey
1017 %************************************************************************
1019 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1021 %************************************************************************
1023 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1024 even though every numeric class has these two as a superclass,
1025 because the list of ambiguous dictionaries hasn't been simplified.
1033 ++ fractionalClassKeys
1035 fractionalClassKeys =
1036 [ fractionalClassKey
1042 -- the strictness analyser needs to know about numeric types
1043 -- (see SaAbsInt.lhs)
1044 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1048 standardClassKeys = derivableClassKeys ++ numericClassKeys
1050 noDictClassKeys = [] -- ToDo: remove?
1053 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1058 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1059 boundedClassKey, showClassKey, readClassKey ]