2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[PrelNames]{Definitions of prelude modules}
6 The strings identify built-in prelude modules. They are
7 defined here so as to avod
9 [oh dear, looks like the recursive module monster caught up with
10 and gobbled whoever was writing the above :-) -- SOF ]
14 Unique, Uniquable(..), hasKey, -- Re-exported for convenience
16 -----------------------------------------------------------
17 module PrelNames, -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR
18 -- (b) Uniques e.g. intTyConKey
19 -- So many that we export them all
21 -----------------------------------------------------------
23 mkTupNameStr, mkTupConRdrName,
25 ------------------------------------------------------------
26 -- Goups of classes and types
27 needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
28 fractionalClassKeys, numericClassKeys, standardClassKeys,
29 derivingOccurrences, -- For a given class C, this tells what other
30 derivableClassKeys, -- things are needed as a result of a
32 numericTyKeys, cCallishTyKeys,
34 mkUnboundName, isUnboundName
37 #include "HsVersions.h"
39 import Module ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName )
40 import OccName ( NameSpace, UserFS, varName, dataName, tcName, clsName,
43 import RdrName ( RdrName, mkOrig, mkUnqual )
45 import Unique ( Unique, Uniquable(..), hasKey,
46 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
47 mkPreludeTyConUnique, mkPreludeClassUnique,
50 import BasicTypes ( Boxity(..), Arity )
51 import UniqFM ( UniqFM, listToUFM )
52 import Name ( Name, mkInternalName, mkKnownKeyExternalName, nameRdrName )
53 import RdrName ( rdrNameOcc )
54 import SrcLoc ( builtinSrcLoc, noSrcLoc )
55 import Util ( nOfThem )
56 import Panic ( panic )
60 %************************************************************************
62 \subsection{Local Names}
64 %************************************************************************
66 This *local* name is used by the interactive stuff
69 itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
73 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
74 -- during compiler debugging.
75 mkUnboundName :: RdrName -> Name
76 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
78 isUnboundName :: Name -> Bool
79 isUnboundName name = name `hasKey` unboundKey
83 %************************************************************************
85 \subsection{Known key Names}
87 %************************************************************************
89 This section tells what the compiler knows about the assocation of
90 names with uniques. These ones are the *non* wired-in ones. The
91 wired in ones are defined in TysWiredIn etc.
94 knownKeyNames :: [Name]
97 -- Type constructors (synonyms especially)
98 ioTyConName, ioDataConName,
105 mutableByteArrayTyConName,
110 stablePtrDataConName,
112 -- Classes. *Must* include:
113 -- classes that are grabbed by key (e.g., eqClassKey)
114 -- classes in "Class.standardClassKeys" (quite a few)
115 eqClassName, -- mentioned, derivable
116 ordClassName, -- derivable
117 boundedClassName, -- derivable
118 numClassName, -- mentioned, numeric
119 enumClassName, -- derivable
122 showClassName, -- derivable
123 realClassName, -- numeric
124 integralClassName, -- numeric
125 fractionalClassName, -- numeric
126 floatingClassName, -- numeric
127 realFracClassName, -- numeric
128 realFloatClassName, -- numeric
129 readClassName, -- derivable
130 ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm)
131 cCallableClassName, -- mentioned, ccallish
132 cReturnableClassName, -- mentioned, ccallish
151 -- not class methods, but overloaded (for parallel arrays)
165 unpackCStringAppendName,
166 unpackCStringFoldrName,
167 unpackCStringUtf8Name,
177 -- Parallel array operations
191 -- FFI primitive types that are not wired-in.
210 splitName, fstName, sndName, -- Used by splittery
212 -- Others (needed for flattening and not mentioned before)
219 %************************************************************************
221 \subsection{Module names}
223 %************************************************************************
226 pRELUDE_Name = mkModuleName "Prelude"
227 gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values
228 pREL_BASE_Name = mkModuleName "GHC.Base"
229 pREL_ENUM_Name = mkModuleName "GHC.Enum"
230 pREL_SHOW_Name = mkModuleName "GHC.Show"
231 pREL_READ_Name = mkModuleName "GHC.Read"
232 pREL_NUM_Name = mkModuleName "GHC.Num"
233 pREL_LIST_Name = mkModuleName "GHC.List"
234 pREL_PARR_Name = mkModuleName "GHC.PArr"
235 pREL_TUP_Name = mkModuleName "Data.Tuple"
236 pREL_PACK_Name = mkModuleName "GHC.Pack"
237 pREL_CONC_Name = mkModuleName "GHC.Conc"
238 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
239 pREL_ST_Name = mkModuleName "GHC.ST"
240 pREL_ARR_Name = mkModuleName "GHC.Arr"
241 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
242 fOREIGN_PTR_Name = mkModuleName "Foreign.ForeignPtr"
243 pREL_STABLE_Name = mkModuleName "GHC.Stable"
244 pREL_ADDR_Name = mkModuleName "GHC.Addr"
245 pREL_PTR_Name = mkModuleName "GHC.Ptr"
246 pREL_ERR_Name = mkModuleName "GHC.Err"
247 pREL_REAL_Name = mkModuleName "GHC.Real"
248 pREL_FLOAT_Name = mkModuleName "GHC.Float"
249 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
250 sYSTEM_IO_Name = mkModuleName "System.IO"
252 mAIN_Name = mkModuleName "Main"
253 pREL_INT_Name = mkModuleName "GHC.Int"
254 pREL_WORD_Name = mkModuleName "GHC.Word"
256 fOREIGNOBJ_Name = mkModuleName "ForeignObj"
257 aDDR_Name = mkModuleName "Addr"
259 gLA_EXTS_Name = mkModuleName "GHC.Exts"
261 gHC_PRIM = mkPrelModule gHC_PRIM_Name
262 pREL_BASE = mkPrelModule pREL_BASE_Name
263 pREL_ADDR = mkPrelModule pREL_ADDR_Name
264 pREL_PTR = mkPrelModule pREL_PTR_Name
265 pREL_STABLE = mkPrelModule pREL_STABLE_Name
266 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
267 pREL_PACK = mkPrelModule pREL_PACK_Name
268 pREL_ERR = mkPrelModule pREL_ERR_Name
269 pREL_NUM = mkPrelModule pREL_NUM_Name
270 pREL_REAL = mkPrelModule pREL_REAL_Name
271 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
272 pRELUDE = mkPrelModule pRELUDE_Name
274 iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive")
277 %************************************************************************
279 \subsection{Constructing the names of tuples
281 %************************************************************************
284 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
286 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
287 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
288 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)") -- not strictly necessary
289 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)") -- ditto
290 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
291 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
293 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
294 mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
295 mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, _PK_ "(#,#)")
296 mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, _PK_ "(#,,#)")
297 mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, _PK_ "(#,,,#)")
298 mkTupNameStr Unboxed n = (gHC_PRIM_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
300 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
301 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
302 (mod, occ) -> mkOrig space mod occ
306 %************************************************************************
308 \subsection{Unqualified RdrNames}
310 %************************************************************************
313 main_RDR_Unqual :: RdrName
314 main_RDR_Unqual = mkUnqual varName FSLIT("main")
315 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
316 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
321 %************************************************************************
323 \subsection{Commonly-used RdrNames}
325 %************************************************************************
327 Many of these Names are not really "built in", but some parts of the
328 compiler (notably the deriving mechanism) need to mention their names,
329 and it's convenient to write them all down in one place.
332 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
333 runMainName = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey
335 -- Stuff from GHC.Prim
336 usOnceTyConName = kindQual FSLIT(".") usOnceTyConKey
337 usManyTyConName = kindQual FSLIT("!") usManyTyConKey
338 superKindName = kindQual FSLIT("KX") kindConKey
339 superBoxityName = kindQual FSLIT("BX") boxityConKey
340 liftedConName = kindQual FSLIT("*") liftedConKey
341 unliftedConName = kindQual FSLIT("#") unliftedConKey
342 openKindConName = kindQual FSLIT("?") anyBoxConKey
343 usageKindConName = kindQual FSLIT("$") usageConKey
344 typeConName = kindQual FSLIT("Type") typeConKey
346 funTyConName = tcQual gHC_PRIM_Name FSLIT("(->)") funTyConKey
347 charPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey
348 intPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey
349 int32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey
350 int64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey
351 wordPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey
352 word32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey
353 word64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey
354 addrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey
355 floatPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey
356 doublePrimTyConName = tcQual gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey
357 statePrimTyConName = tcQual gHC_PRIM_Name FSLIT("State#") statePrimTyConKey
358 realWorldTyConName = tcQual gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey
359 arrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey
360 byteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey
361 mutableArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey
362 mutableByteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
363 mutVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey
364 mVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey
365 stablePtrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey
366 stableNamePrimTyConName = tcQual gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey
367 foreignObjPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey
368 bcoPrimTyConName = tcQual gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey
369 weakPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey
370 threadIdPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey
371 cCallableClassName = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
372 cReturnableClassName = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
374 -- PrelBase data types and constructors
375 charTyConName = tcQual pREL_BASE_Name FSLIT("Char") charTyConKey
376 charDataConName = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey
377 intTyConName = tcQual pREL_BASE_Name FSLIT("Int") intTyConKey
378 intDataConName = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey
379 orderingTyConName = tcQual pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
380 boolTyConName = tcQual pREL_BASE_Name FSLIT("Bool") boolTyConKey
381 falseDataConName = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey
382 trueDataConName = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey
383 listTyConName = tcQual pREL_BASE_Name FSLIT("[]") listTyConKey
384 nilDataConName = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
385 consDataConName = dataQual pREL_BASE_Name FSLIT(":") consDataConKey
388 fstName = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
389 sndName = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
392 crossTyConName = tcQual pREL_BASE_Name FSLIT(":*:") crossTyConKey
393 crossDataConName = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
394 plusTyConName = tcQual pREL_BASE_Name FSLIT(":+:") plusTyConKey
395 inlDataConName = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
396 inrDataConName = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
397 genUnitTyConName = tcQual pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
398 genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
400 -- Random PrelBase functions
401 unsafeCoerceName = varQual pREL_BASE_Name FSLIT("unsafeCoerce")
403 otherwiseIdName = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
404 appendName = varQual pREL_BASE_Name FSLIT("++") appendIdKey
405 foldrName = varQual pREL_BASE_Name FSLIT("foldr") foldrIdKey
406 mapName = varQual pREL_BASE_Name FSLIT("map") mapIdKey
407 buildName = varQual pREL_BASE_Name FSLIT("build") buildIdKey
408 augmentName = varQual pREL_BASE_Name FSLIT("augment") augmentIdKey
409 eqStringName = varQual pREL_BASE_Name FSLIT("eqString") eqStringIdKey
410 andName = varQual pREL_BASE_Name FSLIT("&&") andIdKey
411 orName = varQual pREL_BASE_Name FSLIT("||") orIdKey
414 unpackCStringName = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
415 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
416 unpackCStringFoldrName = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
417 unpackCStringUtf8Name = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
419 -- Classes Eq and Ord
420 eqClassName = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
421 ordClassName = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
422 eqName = varQual pREL_BASE_Name FSLIT("==") eqClassOpKey
423 geName = varQual pREL_BASE_Name FSLIT(">=") geClassOpKey
426 monadClassName = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
427 thenMName = varQual pREL_BASE_Name FSLIT(">>=") thenMClassOpKey
428 returnMName = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
429 failMName = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
432 functorClassName = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
435 showClassName = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey
438 readClassName = clsQual pREL_READ_Name FSLIT("Read") readClassKey
441 numClassName = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
442 fromIntegerName = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
443 minusName = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
444 negateName = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
445 plusIntegerName = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
446 timesIntegerName = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
447 integerTyConName = tcQual pREL_NUM_Name FSLIT("Integer") integerTyConKey
448 smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
449 largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
451 -- PrelReal types and classes
452 rationalTyConName = tcQual pREL_REAL_Name FSLIT("Rational") rationalTyConKey
453 ratioTyConName = tcQual pREL_REAL_Name FSLIT("Ratio") ratioTyConKey
454 ratioDataConName = dataQual pREL_REAL_Name FSLIT(":%") ratioDataConKey
455 realClassName = clsQual pREL_REAL_Name FSLIT("Real") realClassKey
456 integralClassName = clsQual pREL_REAL_Name FSLIT("Integral") integralClassKey
457 realFracClassName = clsQual pREL_REAL_Name FSLIT("RealFrac") realFracClassKey
458 fractionalClassName = clsQual pREL_REAL_Name FSLIT("Fractional") fractionalClassKey
459 fromRationalName = varQual pREL_REAL_Name FSLIT("fromRational") fromRationalClassOpKey
462 floatTyConName = tcQual pREL_FLOAT_Name FSLIT("Float") floatTyConKey
463 floatDataConName = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
464 doubleTyConName = tcQual pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
465 doubleDataConName = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
466 floatingClassName = clsQual pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
467 realFloatClassName = clsQual pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
470 ixClassName = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
473 enumClassName = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
474 toEnumName = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey
475 fromEnumName = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey
476 enumFromName = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
477 enumFromToName = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
478 enumFromThenName = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
479 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
481 -- Overloaded via Class Enum
482 enumFromToPName = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
483 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
486 boundedClassName = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
489 concatName = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
490 filterName = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
491 zipName = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
493 -- parallel array types and functions
494 parrTyConName = tcQual pREL_PARR_Name FSLIT("[::]") parrTyConKey
495 parrDataConName = dataQual pREL_PARR_Name FSLIT("PArr") parrDataConKey
496 nullPName = varQual pREL_PARR_Name FSLIT("nullP") nullPIdKey
497 lengthPName = varQual pREL_PARR_Name FSLIT("lengthP") lengthPIdKey
498 replicatePName = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey
499 mapPName = varQual pREL_PARR_Name FSLIT("mapP") mapPIdKey
500 filterPName = varQual pREL_PARR_Name FSLIT("filterP") filterPIdKey
501 zipPName = varQual pREL_PARR_Name FSLIT("zipP") zipPIdKey
502 crossPName = varQual pREL_PARR_Name FSLIT("crossP") crossPIdKey
503 indexPName = varQual pREL_PARR_Name FSLIT("!:") indexPIdKey
504 toPName = varQual pREL_PARR_Name FSLIT("toP") toPIdKey
505 bpermutePName = varQual pREL_PARR_Name FSLIT("bpermuteP") bpermutePIdKey
506 bpermuteDftPName = varQual pREL_PARR_Name FSLIT("bpermuteDftP")
508 indexOfPName = varQual pREL_PARR_Name FSLIT("indexOfP") indexOfPIdKey
511 ioTyConName = tcQual pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
512 ioDataConName = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
513 bindIOName = varQual pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
514 returnIOName = varQual pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
515 failIOName = varQual pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
518 printName = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
520 -- Int, Word, and Addr things
521 int8TyConName = tcQual pREL_INT_Name FSLIT("Int8") int8TyConKey
522 int16TyConName = tcQual pREL_INT_Name FSLIT("Int16") int16TyConKey
523 int32TyConName = tcQual pREL_INT_Name FSLIT("Int32") int32TyConKey
524 int64TyConName = tcQual pREL_INT_Name FSLIT("Int64") int64TyConKey
526 word8TyConName = tcQual pREL_WORD_Name FSLIT("Word8") word8TyConKey
527 word16TyConName = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey
528 word32TyConName = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey
529 word64TyConName = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey
531 wordTyConName = tcQual pREL_WORD_Name FSLIT("Word") wordTyConKey
532 wordDataConName = dataQual pREL_WORD_Name FSLIT("W#") wordDataConKey
534 addrTyConName = tcQual aDDR_Name FSLIT("Addr") addrTyConKey
535 addrDataConName = dataQual aDDR_Name FSLIT("A#") addrDataConKey
537 ptrTyConName = tcQual pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
538 ptrDataConName = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
540 funPtrTyConName = tcQual pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
541 funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
544 byteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("ByteArray") byteArrayTyConKey
545 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("MutableByteArray") mutableByteArrayTyConKey
547 -- Foreign objects and weak pointers
548 foreignObjTyConName = tcQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjTyConKey
549 foreignObjDataConName = dataQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjDataConKey
550 foreignPtrTyConName = tcQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrTyConKey
551 foreignPtrDataConName = dataQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrDataConKey
552 stablePtrTyConName = tcQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
553 stablePtrDataConName = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
554 deRefStablePtrName = varQual pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
555 newStablePtrName = varQual pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
557 assertName = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
558 getTagName = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
560 errorName = varQual pREL_ERR_Name FSLIT("error") errorIdKey
561 runSTRepName = varQual pREL_ST_Name FSLIT("runSTRep") runSTRepIdKey
563 -- The "split" Id for splittable implicit parameters
564 splitName = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
567 %************************************************************************
569 \subsection{Known names}
571 %************************************************************************
573 The following names are known to the compiler, but they don't require
574 pre-assigned keys. Mostly these names are used in generating deriving
575 code, which is passed through the renamer anyway.
577 THEY ARE ALL ORIGINAL NAMES, HOWEVER
581 tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName
582 ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName
584 tupleCon_RDR = mkTupConRdrName dataName Boxed
585 tupleTyCon_RDR = mkTupConRdrName tcName Boxed
586 ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed
587 ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed
589 unitCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("()")
590 unitTyCon_RDR = tcQual_RDR pREL_BASE_Name FSLIT("()")
592 and_RDR = varQual_RDR pREL_BASE_Name FSLIT("&&")
593 not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not")
594 compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".")
595 ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=")
596 le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=")
597 lt_RDR = varQual_RDR pREL_BASE_Name FSLIT("<")
598 gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">")
599 ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT")
600 eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
601 gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT")
602 max_RDR = varQual_RDR pREL_BASE_Name FSLIT("max")
603 min_RDR = varQual_RDR pREL_BASE_Name FSLIT("min")
604 compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare")
605 showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList")
606 showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
607 showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
608 showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace")
609 showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString")
610 showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen")
611 readsPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readsPrec")
612 readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList")
613 readParen_RDR = varQual_RDR pREL_READ_Name FSLIT("readParen")
614 lex_RDR = varQual_RDR pREL_READ_Name FSLIT("lex")
615 readList___RDR = varQual_RDR pREL_READ_Name FSLIT("readList__")
616 times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*")
617 plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+")
618 negate_RDR = varQual_RDR pREL_NUM_Name FSLIT("negate")
619 range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range")
620 index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index")
621 inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange")
622 succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ")
623 pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred")
624 minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
625 maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
626 assertErr_RDR = varQual_RDR pREL_ERR_Name FSLIT("assertError")
629 These RDR names also have known keys, so we need to get back the RDR names to
630 populate the occurrence list above.
633 funTyCon_RDR = nameRdrName funTyConName
634 nilCon_RDR = nameRdrName nilDataConName
635 listTyCon_RDR = nameRdrName listTyConName
636 parrTyCon_RDR = nameRdrName parrTyConName
637 ioTyCon_RDR = nameRdrName ioTyConName
638 intTyCon_RDR = nameRdrName intTyConName
639 eq_RDR = nameRdrName eqName
640 ge_RDR = nameRdrName geName
641 numClass_RDR = nameRdrName numClassName
642 ordClass_RDR = nameRdrName ordClassName
643 map_RDR = nameRdrName mapName
644 append_RDR = nameRdrName appendName
645 foldr_RDR = nameRdrName foldrName
646 build_RDR = nameRdrName buildName
647 enumFromTo_RDR = nameRdrName enumFromToName
648 returnM_RDR = nameRdrName returnMName
649 thenM_RDR = nameRdrName thenMName
650 failM_RDR = nameRdrName failMName
651 false_RDR = nameRdrName falseDataConName
652 true_RDR = nameRdrName trueDataConName
653 error_RDR = nameRdrName errorName
654 getTag_RDR = nameRdrName getTagName
655 fromEnum_RDR = nameRdrName fromEnumName
656 toEnum_RDR = nameRdrName toEnumName
657 enumFrom_RDR = nameRdrName enumFromName
658 mkInt_RDR = nameRdrName intDataConName
659 enumFromThen_RDR = nameRdrName enumFromThenName
660 enumFromThenTo_RDR = nameRdrName enumFromThenToName
661 ratioDataCon_RDR = nameRdrName ratioDataConName
662 plusInteger_RDR = nameRdrName plusIntegerName
663 timesInteger_RDR = nameRdrName timesIntegerName
664 enumClass_RDR = nameRdrName enumClassName
665 monadClass_RDR = nameRdrName monadClassName
666 ioDataCon_RDR = nameRdrName ioDataConName
667 cCallableClass_RDR = nameRdrName cCallableClassName
668 cReturnableClass_RDR = nameRdrName cReturnableClassName
669 eqClass_RDR = nameRdrName eqClassName
670 eqString_RDR = nameRdrName eqStringName
671 unpackCString_RDR = nameRdrName unpackCStringName
672 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
673 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
674 deRefStablePtr_RDR = nameRdrName deRefStablePtrName
675 newStablePtr_RDR = nameRdrName newStablePtrName
676 bindIO_RDR = nameRdrName bindIOName
677 returnIO_RDR = nameRdrName returnIOName
678 fromInteger_RDR = nameRdrName fromIntegerName
679 fromRational_RDR = nameRdrName fromRationalName
680 minus_RDR = nameRdrName minusName
683 %************************************************************************
685 \subsection{Local helpers}
687 %************************************************************************
689 All these are original names; hence mkOrig
692 varQual mod str uq = mkKnownKeyExternalName (varQual_RDR mod str) uq
693 dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq
694 tcQual mod str uq = mkKnownKeyExternalName (tcQual_RDR mod str) uq
695 clsQual mod str uq = mkKnownKeyExternalName (clsQual_RDR mod str) uq
697 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) builtinSrcLoc
698 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
699 -- And they don't come from any particular module; indeed we always
700 -- want to print them unqualified. Hence the LocalName
702 varQual_RDR mod str = mkOrig varName mod str
703 tcQual_RDR mod str = mkOrig tcName mod str
704 clsQual_RDR mod str = mkOrig clsName mod str
705 dataQual_RDR mod str = mkOrig dataName mod str
708 %************************************************************************
710 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
712 %************************************************************************
715 boundedClassKey = mkPreludeClassUnique 1
716 enumClassKey = mkPreludeClassUnique 2
717 eqClassKey = mkPreludeClassUnique 3
718 floatingClassKey = mkPreludeClassUnique 5
719 fractionalClassKey = mkPreludeClassUnique 6
720 integralClassKey = mkPreludeClassUnique 7
721 monadClassKey = mkPreludeClassUnique 8
722 functorClassKey = mkPreludeClassUnique 10
723 numClassKey = mkPreludeClassUnique 11
724 ordClassKey = mkPreludeClassUnique 12
725 readClassKey = mkPreludeClassUnique 13
726 realClassKey = mkPreludeClassUnique 14
727 realFloatClassKey = mkPreludeClassUnique 15
728 realFracClassKey = mkPreludeClassUnique 16
729 showClassKey = mkPreludeClassUnique 17
731 cCallableClassKey = mkPreludeClassUnique 18
732 cReturnableClassKey = mkPreludeClassUnique 19
734 ixClassKey = mkPreludeClassUnique 20
737 %************************************************************************
739 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
741 %************************************************************************
744 addrPrimTyConKey = mkPreludeTyConUnique 1
745 addrTyConKey = mkPreludeTyConUnique 2
746 arrayPrimTyConKey = mkPreludeTyConUnique 3
747 boolTyConKey = mkPreludeTyConUnique 4
748 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
749 charPrimTyConKey = mkPreludeTyConUnique 7
750 charTyConKey = mkPreludeTyConUnique 8
751 doublePrimTyConKey = mkPreludeTyConUnique 9
752 doubleTyConKey = mkPreludeTyConUnique 10
753 floatPrimTyConKey = mkPreludeTyConUnique 11
754 floatTyConKey = mkPreludeTyConUnique 12
755 funTyConKey = mkPreludeTyConUnique 13
756 intPrimTyConKey = mkPreludeTyConUnique 14
757 intTyConKey = mkPreludeTyConUnique 15
758 int8TyConKey = mkPreludeTyConUnique 16
759 int16TyConKey = mkPreludeTyConUnique 17
760 int32PrimTyConKey = mkPreludeTyConUnique 18
761 int32TyConKey = mkPreludeTyConUnique 19
762 int64PrimTyConKey = mkPreludeTyConUnique 20
763 int64TyConKey = mkPreludeTyConUnique 21
764 integerTyConKey = mkPreludeTyConUnique 22
765 listTyConKey = mkPreludeTyConUnique 23
766 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
767 foreignObjTyConKey = mkPreludeTyConUnique 25
768 foreignPtrTyConKey = mkPreludeTyConUnique 26
769 weakPrimTyConKey = mkPreludeTyConUnique 27
770 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
771 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
772 orderingTyConKey = mkPreludeTyConUnique 30
773 mVarPrimTyConKey = mkPreludeTyConUnique 31
774 ratioTyConKey = mkPreludeTyConUnique 32
775 rationalTyConKey = mkPreludeTyConUnique 33
776 realWorldTyConKey = mkPreludeTyConUnique 34
777 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
778 stablePtrTyConKey = mkPreludeTyConUnique 36
779 statePrimTyConKey = mkPreludeTyConUnique 50
780 stableNamePrimTyConKey = mkPreludeTyConUnique 51
781 stableNameTyConKey = mkPreludeTyConUnique 52
782 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
783 mutVarPrimTyConKey = mkPreludeTyConUnique 55
784 ioTyConKey = mkPreludeTyConUnique 56
785 byteArrayTyConKey = mkPreludeTyConUnique 57
786 wordPrimTyConKey = mkPreludeTyConUnique 58
787 wordTyConKey = mkPreludeTyConUnique 59
788 word8TyConKey = mkPreludeTyConUnique 60
789 word16TyConKey = mkPreludeTyConUnique 61
790 word32PrimTyConKey = mkPreludeTyConUnique 62
791 word32TyConKey = mkPreludeTyConUnique 63
792 word64PrimTyConKey = mkPreludeTyConUnique 64
793 word64TyConKey = mkPreludeTyConUnique 65
794 liftedConKey = mkPreludeTyConUnique 66
795 unliftedConKey = mkPreludeTyConUnique 67
796 anyBoxConKey = mkPreludeTyConUnique 68
797 kindConKey = mkPreludeTyConUnique 69
798 boxityConKey = mkPreludeTyConUnique 70
799 typeConKey = mkPreludeTyConUnique 71
800 threadIdPrimTyConKey = mkPreludeTyConUnique 72
801 bcoPrimTyConKey = mkPreludeTyConUnique 73
802 ptrTyConKey = mkPreludeTyConUnique 74
803 funPtrTyConKey = mkPreludeTyConUnique 75
805 -- Usage type constructors
806 usageConKey = mkPreludeTyConUnique 76
807 usOnceTyConKey = mkPreludeTyConUnique 77
808 usManyTyConKey = mkPreludeTyConUnique 78
810 -- Generic Type Constructors
811 crossTyConKey = mkPreludeTyConUnique 79
812 plusTyConKey = mkPreludeTyConUnique 80
813 genUnitTyConKey = mkPreludeTyConUnique 81
815 -- Parallel array type constructor
816 parrTyConKey = mkPreludeTyConUnique 82
818 unitTyConKey = mkTupleTyConUnique Boxed 0
821 %************************************************************************
823 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
825 %************************************************************************
828 addrDataConKey = mkPreludeDataConUnique 0
829 charDataConKey = mkPreludeDataConUnique 1
830 consDataConKey = mkPreludeDataConUnique 2
831 doubleDataConKey = mkPreludeDataConUnique 3
832 falseDataConKey = mkPreludeDataConUnique 4
833 floatDataConKey = mkPreludeDataConUnique 5
834 intDataConKey = mkPreludeDataConUnique 6
835 smallIntegerDataConKey = mkPreludeDataConUnique 7
836 largeIntegerDataConKey = mkPreludeDataConUnique 8
837 foreignObjDataConKey = mkPreludeDataConUnique 9
838 foreignPtrDataConKey = mkPreludeDataConUnique 10
839 nilDataConKey = mkPreludeDataConUnique 11
840 ratioDataConKey = mkPreludeDataConUnique 12
841 stablePtrDataConKey = mkPreludeDataConUnique 13
842 stableNameDataConKey = mkPreludeDataConUnique 14
843 trueDataConKey = mkPreludeDataConUnique 15
844 wordDataConKey = mkPreludeDataConUnique 16
845 ioDataConKey = mkPreludeDataConUnique 17
846 ptrDataConKey = mkPreludeDataConUnique 18
847 funPtrDataConKey = mkPreludeDataConUnique 19
849 -- Generic data constructors
850 crossDataConKey = mkPreludeDataConUnique 20
851 inlDataConKey = mkPreludeDataConUnique 21
852 inrDataConKey = mkPreludeDataConUnique 22
853 genUnitDataConKey = mkPreludeDataConUnique 23
855 -- Data constructor for parallel arrays
856 parrDataConKey = mkPreludeDataConUnique 24
859 %************************************************************************
861 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
863 %************************************************************************
866 absentErrorIdKey = mkPreludeMiscIdUnique 1
867 appendIdKey = mkPreludeMiscIdUnique 2
868 augmentIdKey = mkPreludeMiscIdUnique 3
869 buildIdKey = mkPreludeMiscIdUnique 4
870 errorIdKey = mkPreludeMiscIdUnique 5
871 foldlIdKey = mkPreludeMiscIdUnique 6
872 foldrIdKey = mkPreludeMiscIdUnique 7
873 recSelErrIdKey = mkPreludeMiscIdUnique 8
874 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
875 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
876 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
877 integerZeroIdKey = mkPreludeMiscIdUnique 12
878 int2IntegerIdKey = mkPreludeMiscIdUnique 13
879 seqIdKey = mkPreludeMiscIdUnique 14
880 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
881 eqStringIdKey = mkPreludeMiscIdUnique 16
882 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
883 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
884 errorCStringIdKey = mkPreludeMiscIdUnique 19
885 parErrorIdKey = mkPreludeMiscIdUnique 20
886 parIdKey = mkPreludeMiscIdUnique 21
887 patErrorIdKey = mkPreludeMiscIdUnique 22
888 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
889 recConErrorIdKey = mkPreludeMiscIdUnique 24
890 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
891 traceIdKey = mkPreludeMiscIdUnique 26
892 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
893 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
894 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
895 unpackCStringIdKey = mkPreludeMiscIdUnique 30
896 ushowListIdKey = mkPreludeMiscIdUnique 31
897 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
898 concatIdKey = mkPreludeMiscIdUnique 33
899 filterIdKey = mkPreludeMiscIdUnique 34
900 zipIdKey = mkPreludeMiscIdUnique 35
901 bindIOIdKey = mkPreludeMiscIdUnique 36
902 returnIOIdKey = mkPreludeMiscIdUnique 37
903 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
904 newStablePtrIdKey = mkPreludeMiscIdUnique 39
905 getTagIdKey = mkPreludeMiscIdUnique 40
906 plusIntegerIdKey = mkPreludeMiscIdUnique 41
907 timesIntegerIdKey = mkPreludeMiscIdUnique 42
908 printIdKey = mkPreludeMiscIdUnique 43
909 failIOIdKey = mkPreludeMiscIdUnique 44
910 nullAddrIdKey = mkPreludeMiscIdUnique 46
911 voidArgIdKey = mkPreludeMiscIdUnique 47
912 splitIdKey = mkPreludeMiscIdUnique 48
913 fstIdKey = mkPreludeMiscIdUnique 49
914 sndIdKey = mkPreludeMiscIdUnique 50
915 otherwiseIdKey = mkPreludeMiscIdUnique 51
916 mapIdKey = mkPreludeMiscIdUnique 52
917 assertIdKey = mkPreludeMiscIdUnique 53
918 runSTRepIdKey = mkPreludeMiscIdUnique 54
920 dollarMainKey = mkPreludeMiscIdUnique 55
921 runMainKey = mkPreludeMiscIdUnique 56
923 andIdKey = mkPreludeMiscIdUnique 57
924 orIdKey = mkPreludeMiscIdUnique 58
926 -- Parallel array functions
927 nullPIdKey = mkPreludeMiscIdUnique 70
928 lengthPIdKey = mkPreludeMiscIdUnique 71
929 replicatePIdKey = mkPreludeMiscIdUnique 72
930 mapPIdKey = mkPreludeMiscIdUnique 73
931 filterPIdKey = mkPreludeMiscIdUnique 74
932 zipPIdKey = mkPreludeMiscIdUnique 75
933 crossPIdKey = mkPreludeMiscIdUnique 76
934 indexPIdKey = mkPreludeMiscIdUnique 77
935 toPIdKey = mkPreludeMiscIdUnique 78
936 enumFromToPIdKey = mkPreludeMiscIdUnique 79
937 enumFromThenToPIdKey = mkPreludeMiscIdUnique 80
938 bpermutePIdKey = mkPreludeMiscIdUnique 81
939 bpermuteDftPIdKey = mkPreludeMiscIdUnique 82
940 indexOfPIdKey = mkPreludeMiscIdUnique 83
943 Certain class operations from Prelude classes. They get their own
944 uniques so we can look them up easily when we want to conjure them up
945 during type checking.
948 -- Just a place holder for unbound variables produced by the renamer:
949 unboundKey = mkPreludeMiscIdUnique 101
950 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
951 minusClassOpKey = mkPreludeMiscIdUnique 103
952 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
953 enumFromClassOpKey = mkPreludeMiscIdUnique 105
954 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
955 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
956 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
957 eqClassOpKey = mkPreludeMiscIdUnique 109
958 geClassOpKey = mkPreludeMiscIdUnique 110
959 negateClassOpKey = mkPreludeMiscIdUnique 111
960 failMClassOpKey = mkPreludeMiscIdUnique 112
961 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
962 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
963 returnMClassOpKey = mkPreludeMiscIdUnique 117
964 toEnumClassOpKey = mkPreludeMiscIdUnique 119
968 %************************************************************************
970 \subsection{Standard groups of types}
972 %************************************************************************
984 -- Renamer always imports these data decls replete with constructors
985 -- so that desugarer can always see their constructors. Ugh!
990 , mutableByteArrayTyConKey
1006 %************************************************************************
1008 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1010 %************************************************************************
1012 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1015 @derivingOccurrences@ maps a class name to a list of the (qualified)
1016 occurrences that will be mentioned by the derived code for the class
1017 when it is later generated. We don't need to put in things that are
1018 WiredIn (because they are already mapped to their correct name by the
1019 @NameSupply@. The class itself, and all its class ops, is already
1020 flagged as an occurrence so we don't need to mention that either.
1022 @derivingOccurrences@ has an item for every derivable class, even if
1023 that item is empty, because we treat lookup failure as indicating that
1024 the class is illegal in a deriving clause.
1027 derivingOccurrences :: UniqFM [RdrName]
1028 derivingOccurrences = listToUFM deriving_occ_info
1030 derivableClassKeys = map fst deriving_occ_info
1033 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
1034 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
1035 -- EQ (from Ordering) is needed to force in the constructors
1036 -- as well as the type constructor.
1037 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
1038 -- The last two Enum deps are only used to produce better
1039 -- error msgs for derived toEnum methods.
1040 , (boundedClassKey, [intTyCon_RDR])
1041 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
1042 showParen_RDR, showSpace_RDR, showList___RDR])
1043 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
1044 foldr_RDR, build_RDR,
1045 -- foldr and build required for list comprehension
1047 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
1048 -- returnM (and the rest of the Monad class decl)
1049 -- will be forced in as result of depending
1050 -- on thenM. -- SOF 1/99
1051 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
1052 foldr_RDR, build_RDR,
1053 -- foldr and build required for list comprehension used
1054 -- with single constructor types -- KSW 2000-06
1055 returnM_RDR, failM_RDR])
1056 -- the last two are needed to force returnM, thenM and failM
1057 -- in before typechecking the list(monad) comprehension
1058 -- generated for derived Ix instances (range method)
1059 -- of single constructor types. -- SOF 8/97
1061 -- intTyCon: Practically any deriving needs Int, either for index calculations,
1063 -- ordClass: really it's the methods that are actually used.
1064 -- numClass: for Int literals
1068 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1069 even though every numeric class has these two as a superclass,
1070 because the list of ambiguous dictionaries hasn't been simplified.
1078 ++ fractionalClassKeys
1080 fractionalClassKeys =
1081 [ fractionalClassKey
1087 -- the strictness analyser needs to know about numeric types
1088 -- (see SaAbsInt.lhs)
1089 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1095 , cReturnableClassKey
1099 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1101 -- We have to have "CCallable" and "CReturnable" in the standard
1102 -- classes, so that if you go...
1104 -- _ccall_ foo ... 93{-numeric literal-} ...
1106 -- ... it can do The Right Thing on the 93.
1108 noDictClassKeys -- These classes are used only for type annotations;
1109 -- they are not implemented by dictionaries, ever.