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 )
61 %************************************************************************
63 \subsection{Local Names}
65 %************************************************************************
67 This *local* name is used by the interactive stuff
70 itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
74 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
75 -- during compiler debugging.
76 mkUnboundName :: RdrName -> Name
77 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
79 isUnboundName :: Name -> Bool
80 isUnboundName name = name `hasKey` unboundKey
84 %************************************************************************
86 \subsection{Known key Names}
88 %************************************************************************
90 This section tells what the compiler knows about the assocation of
91 names with uniques. These ones are the *non* wired-in ones. The
92 wired in ones are defined in TysWiredIn etc.
95 knownKeyNames :: [Name]
98 -- Type constructors (synonyms especially)
99 ioTyConName, ioDataConName,
106 mutableByteArrayTyConName,
109 stablePtrDataConName,
111 -- Classes. *Must* include:
112 -- classes that are grabbed by key (e.g., eqClassKey)
113 -- classes in "Class.standardClassKeys" (quite a few)
114 eqClassName, -- mentioned, derivable
115 ordClassName, -- derivable
116 boundedClassName, -- derivable
117 numClassName, -- mentioned, numeric
118 enumClassName, -- derivable
121 showClassName, -- derivable
122 realClassName, -- numeric
123 integralClassName, -- numeric
124 fractionalClassName, -- numeric
125 floatingClassName, -- numeric
126 realFracClassName, -- numeric
127 realFloatClassName, -- numeric
128 readClassName, -- derivable
129 ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm)
130 cCallableClassName, -- mentioned, ccallish
131 cReturnableClassName, -- mentioned, ccallish
151 -- not class methods, but overloaded (for parallel arrays)
166 unpackCStringAppendName,
167 unpackCStringFoldrName,
168 unpackCStringUtf8Name,
178 -- Parallel array operations
192 -- FFI primitive types that are not wired-in.
211 splitName, fstName, sndName, -- Used by splittery
213 -- Others (needed for flattening and not mentioned before)
218 monadNames :: [Name] -- The monad ops need by a HsDo
219 monadNames = [returnMName, failMName, bindMName, thenMName]
223 %************************************************************************
225 \subsection{Module names}
227 %************************************************************************
230 pRELUDE_Name = mkModuleName "Prelude"
231 gHC_PRIM_Name = mkModuleName "GHC.Prim" -- Primitive types and values
232 pREL_BASE_Name = mkModuleName "GHC.Base"
233 pREL_ENUM_Name = mkModuleName "GHC.Enum"
234 pREL_SHOW_Name = mkModuleName "GHC.Show"
235 pREL_READ_Name = mkModuleName "GHC.Read"
236 pREL_NUM_Name = mkModuleName "GHC.Num"
237 pREL_LIST_Name = mkModuleName "GHC.List"
238 pREL_PARR_Name = mkModuleName "GHC.PArr"
239 pREL_TUP_Name = mkModuleName "Data.Tuple"
240 pREL_PACK_Name = mkModuleName "GHC.Pack"
241 pREL_CONC_Name = mkModuleName "GHC.Conc"
242 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
243 pREL_ST_Name = mkModuleName "GHC.ST"
244 pREL_ARR_Name = mkModuleName "GHC.Arr"
245 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
246 pREL_STABLE_Name = mkModuleName "GHC.Stable"
247 pREL_ADDR_Name = mkModuleName "GHC.Addr"
248 pREL_PTR_Name = mkModuleName "GHC.Ptr"
249 pREL_ERR_Name = mkModuleName "GHC.Err"
250 pREL_REAL_Name = mkModuleName "GHC.Real"
251 pREL_FLOAT_Name = mkModuleName "GHC.Float"
252 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
253 sYSTEM_IO_Name = mkModuleName "System.IO"
255 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
256 lEX_Name = mkModuleName "Text.Read.Lex"
258 mAIN_Name = mkModuleName "Main"
259 pREL_INT_Name = mkModuleName "GHC.Int"
260 pREL_WORD_Name = mkModuleName "GHC.Word"
262 aDDR_Name = mkModuleName "Addr"
264 gLA_EXTS_Name = mkModuleName "GHC.Exts"
266 gHC_PRIM = mkPrelModule gHC_PRIM_Name
267 pREL_BASE = mkPrelModule pREL_BASE_Name
268 pREL_ADDR = mkPrelModule pREL_ADDR_Name
269 pREL_PTR = mkPrelModule pREL_PTR_Name
270 pREL_STABLE = mkPrelModule pREL_STABLE_Name
271 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
272 pREL_PACK = mkPrelModule pREL_PACK_Name
273 pREL_ERR = mkPrelModule pREL_ERR_Name
274 pREL_NUM = mkPrelModule pREL_NUM_Name
275 pREL_REAL = mkPrelModule pREL_REAL_Name
276 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
277 pRELUDE = mkPrelModule pRELUDE_Name
279 iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive")
282 %************************************************************************
284 \subsection{Constructing the names of tuples
286 %************************************************************************
289 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
291 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
292 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
293 mkTupNameStr Boxed 2 = (pREL_TUP_Name, mkFastString "(,)") -- not strictly necessary
294 mkTupNameStr Boxed 3 = (pREL_TUP_Name, mkFastString "(,,)") -- ditto
295 mkTupNameStr Boxed 4 = (pREL_TUP_Name, mkFastString "(,,,)") -- ditto
296 mkTupNameStr Boxed n = (pREL_TUP_Name, mkFastString ("(" ++ nOfThem (n-1) ',' ++ ")"))
298 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
299 mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, mkFastString "(# #)") -- 1 and 0 both make sense!!!
300 mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, mkFastString "(#,#)")
301 mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, mkFastString "(#,,#)")
302 mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, mkFastString "(#,,,#)")
303 mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
305 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
306 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
307 (mod, occ) -> mkOrig space mod occ
311 %************************************************************************
313 \subsection{Unqualified RdrNames}
315 %************************************************************************
318 main_RDR_Unqual :: RdrName
319 main_RDR_Unqual = mkUnqual varName FSLIT("main")
320 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
321 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
326 %************************************************************************
328 \subsection{Commonly-used RdrNames}
330 %************************************************************************
332 Many of these Names are not really "built in", but some parts of the
333 compiler (notably the deriving mechanism) need to mention their names,
334 and it's convenient to write them all down in one place.
337 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
338 runIOName = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey
340 -- Stuff from GHC.Prim
341 usOnceTyConName = kindQual FSLIT(".") usOnceTyConKey
342 usManyTyConName = kindQual FSLIT("!") usManyTyConKey
343 superKindName = kindQual FSLIT("KX") kindConKey
344 superBoxityName = kindQual FSLIT("BX") boxityConKey
345 liftedConName = kindQual FSLIT("*") liftedConKey
346 unliftedConName = kindQual FSLIT("#") unliftedConKey
347 openKindConName = kindQual FSLIT("?") anyBoxConKey
348 usageKindConName = kindQual FSLIT("$") usageConKey
349 typeConName = kindQual FSLIT("Type") typeConKey
351 funTyConName = tcQual gHC_PRIM_Name FSLIT("(->)") funTyConKey
352 charPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey
353 intPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey
354 int32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey
355 int64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey
356 wordPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey
357 word32PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey
358 word64PrimTyConName = tcQual gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey
359 addrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey
360 floatPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey
361 doublePrimTyConName = tcQual gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey
362 statePrimTyConName = tcQual gHC_PRIM_Name FSLIT("State#") statePrimTyConKey
363 realWorldTyConName = tcQual gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey
364 arrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey
365 byteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey
366 mutableArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey
367 mutableByteArrayPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
368 mutVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey
369 mVarPrimTyConName = tcQual gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey
370 stablePtrPrimTyConName = tcQual gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey
371 stableNamePrimTyConName = tcQual gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey
372 foreignObjPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey
373 bcoPrimTyConName = tcQual gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey
374 weakPrimTyConName = tcQual gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey
375 threadIdPrimTyConName = tcQual gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey
376 cCallableClassName = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
377 cReturnableClassName = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
379 -- PrelBase data types and constructors
380 charTyConName = tcQual pREL_BASE_Name FSLIT("Char") charTyConKey
381 charDataConName = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey
382 intTyConName = tcQual pREL_BASE_Name FSLIT("Int") intTyConKey
383 intDataConName = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey
384 orderingTyConName = tcQual pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
385 boolTyConName = tcQual pREL_BASE_Name FSLIT("Bool") boolTyConKey
386 falseDataConName = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey
387 trueDataConName = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey
388 listTyConName = tcQual pREL_BASE_Name FSLIT("[]") listTyConKey
389 nilDataConName = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
390 consDataConName = dataQual pREL_BASE_Name FSLIT(":") consDataConKey
393 fstName = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
394 sndName = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
397 crossTyConName = tcQual pREL_BASE_Name FSLIT(":*:") crossTyConKey
398 crossDataConName = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
399 plusTyConName = tcQual pREL_BASE_Name FSLIT(":+:") plusTyConKey
400 inlDataConName = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
401 inrDataConName = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
402 genUnitTyConName = tcQual pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
403 genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
405 -- Random PrelBase functions
406 unsafeCoerceName = varQual pREL_BASE_Name FSLIT("unsafeCoerce")
408 otherwiseIdName = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
409 appendName = varQual pREL_BASE_Name FSLIT("++") appendIdKey
410 foldrName = varQual pREL_BASE_Name FSLIT("foldr") foldrIdKey
411 mapName = varQual pREL_BASE_Name FSLIT("map") mapIdKey
412 buildName = varQual pREL_BASE_Name FSLIT("build") buildIdKey
413 augmentName = varQual pREL_BASE_Name FSLIT("augment") augmentIdKey
414 eqStringName = varQual pREL_BASE_Name FSLIT("eqString") eqStringIdKey
415 andName = varQual pREL_BASE_Name FSLIT("&&") andIdKey
416 orName = varQual pREL_BASE_Name FSLIT("||") orIdKey
419 unpackCStringName = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
420 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
421 unpackCStringFoldrName = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
422 unpackCStringUtf8Name = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
424 -- Classes Eq and Ord
425 eqClassName = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
426 ordClassName = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
427 eqName = varQual pREL_BASE_Name FSLIT("==") eqClassOpKey
428 geName = varQual pREL_BASE_Name FSLIT(">=") geClassOpKey
431 monadClassName = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
432 thenMName = varQual pREL_BASE_Name FSLIT(">>") thenMClassOpKey
433 bindMName = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey
434 returnMName = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
435 failMName = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
438 functorClassName = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
441 showClassName = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey
444 readClassName = clsQual pREL_READ_Name FSLIT("Read") readClassKey
447 numClassName = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
448 fromIntegerName = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
449 minusName = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
450 negateName = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
451 plusIntegerName = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
452 timesIntegerName = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
453 integerTyConName = tcQual pREL_NUM_Name FSLIT("Integer") integerTyConKey
454 smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
455 largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
457 -- PrelReal types and classes
458 rationalTyConName = tcQual pREL_REAL_Name FSLIT("Rational") rationalTyConKey
459 ratioTyConName = tcQual pREL_REAL_Name FSLIT("Ratio") ratioTyConKey
460 ratioDataConName = dataQual pREL_REAL_Name FSLIT(":%") ratioDataConKey
461 realClassName = clsQual pREL_REAL_Name FSLIT("Real") realClassKey
462 integralClassName = clsQual pREL_REAL_Name FSLIT("Integral") integralClassKey
463 realFracClassName = clsQual pREL_REAL_Name FSLIT("RealFrac") realFracClassKey
464 fractionalClassName = clsQual pREL_REAL_Name FSLIT("Fractional") fractionalClassKey
465 fromRationalName = varQual pREL_REAL_Name FSLIT("fromRational") fromRationalClassOpKey
468 floatTyConName = tcQual pREL_FLOAT_Name FSLIT("Float") floatTyConKey
469 floatDataConName = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
470 doubleTyConName = tcQual pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
471 doubleDataConName = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
472 floatingClassName = clsQual pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
473 realFloatClassName = clsQual pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
476 ixClassName = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
479 enumClassName = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
480 toEnumName = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey
481 fromEnumName = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey
482 enumFromName = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
483 enumFromToName = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
484 enumFromThenName = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
485 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
487 -- Overloaded via Class Enum
488 enumFromToPName = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
489 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
492 boundedClassName = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
495 concatName = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
496 filterName = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
497 zipName = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
499 -- parallel array types and functions
500 parrTyConName = tcQual pREL_PARR_Name FSLIT("[::]") parrTyConKey
501 parrDataConName = dataQual pREL_PARR_Name FSLIT("PArr") parrDataConKey
502 nullPName = varQual pREL_PARR_Name FSLIT("nullP") nullPIdKey
503 lengthPName = varQual pREL_PARR_Name FSLIT("lengthP") lengthPIdKey
504 replicatePName = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey
505 mapPName = varQual pREL_PARR_Name FSLIT("mapP") mapPIdKey
506 filterPName = varQual pREL_PARR_Name FSLIT("filterP") filterPIdKey
507 zipPName = varQual pREL_PARR_Name FSLIT("zipP") zipPIdKey
508 crossPName = varQual pREL_PARR_Name FSLIT("crossP") crossPIdKey
509 indexPName = varQual pREL_PARR_Name FSLIT("!:") indexPIdKey
510 toPName = varQual pREL_PARR_Name FSLIT("toP") toPIdKey
511 bpermutePName = varQual pREL_PARR_Name FSLIT("bpermuteP") bpermutePIdKey
512 bpermuteDftPName = varQual pREL_PARR_Name FSLIT("bpermuteDftP")
514 indexOfPName = varQual pREL_PARR_Name FSLIT("indexOfP") indexOfPIdKey
517 ioTyConName = tcQual pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
518 ioDataConName = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
519 thenIOName = varQual pREL_IO_BASE_Name FSLIT("thenIO") thenIOIdKey
520 bindIOName = varQual pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
521 returnIOName = varQual pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
522 failIOName = varQual pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
525 printName = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
527 -- Int, Word, and Addr things
528 int8TyConName = tcQual pREL_INT_Name FSLIT("Int8") int8TyConKey
529 int16TyConName = tcQual pREL_INT_Name FSLIT("Int16") int16TyConKey
530 int32TyConName = tcQual pREL_INT_Name FSLIT("Int32") int32TyConKey
531 int64TyConName = tcQual pREL_INT_Name FSLIT("Int64") int64TyConKey
533 word8TyConName = tcQual pREL_WORD_Name FSLIT("Word8") word8TyConKey
534 word16TyConName = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey
535 word32TyConName = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey
536 word64TyConName = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey
538 wordTyConName = tcQual pREL_WORD_Name FSLIT("Word") wordTyConKey
539 wordDataConName = dataQual pREL_WORD_Name FSLIT("W#") wordDataConKey
541 addrTyConName = tcQual aDDR_Name FSLIT("Addr") addrTyConKey
542 addrDataConName = dataQual aDDR_Name FSLIT("A#") addrDataConKey
544 ptrTyConName = tcQual pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
545 ptrDataConName = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
547 funPtrTyConName = tcQual pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
548 funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
551 byteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("ByteArray") byteArrayTyConKey
552 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("MutableByteArray") mutableByteArrayTyConKey
554 -- Foreign objects and weak pointers
555 stablePtrTyConName = tcQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
556 stablePtrDataConName = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
557 deRefStablePtrName = varQual pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
558 newStablePtrName = varQual pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
560 assertName = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
561 getTagName = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
563 errorName = varQual pREL_ERR_Name FSLIT("error") errorIdKey
564 runSTRepName = varQual pREL_ST_Name FSLIT("runSTRep") runSTRepIdKey
566 -- The "split" Id for splittable implicit parameters
567 splitName = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
570 %************************************************************************
572 \subsection{Known names}
574 %************************************************************************
576 The following names are known to the compiler, but they don't require
577 pre-assigned keys. Mostly these names are used in generating deriving
578 code, which is passed through the renamer anyway.
580 THEY ARE ALL ORIGINAL NAMES, HOWEVER
584 tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName
585 ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName
587 tupleCon_RDR = mkTupConRdrName dataName Boxed
588 tupleTyCon_RDR = mkTupConRdrName tcName Boxed
589 ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed
590 ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed
592 unitCon_RDR = dataQual_RDR pREL_BASE_Name FSLIT("()")
593 unitTyCon_RDR = tcQual_RDR pREL_BASE_Name FSLIT("()")
595 and_RDR = varQual_RDR pREL_BASE_Name FSLIT("&&")
596 not_RDR = varQual_RDR pREL_BASE_Name FSLIT("not")
597 compose_RDR = varQual_RDR pREL_BASE_Name FSLIT(".")
598 ne_RDR = varQual_RDR pREL_BASE_Name FSLIT("/=")
599 le_RDR = varQual_RDR pREL_BASE_Name FSLIT("<=")
600 lt_RDR = varQual_RDR pREL_BASE_Name FSLIT("<")
601 gt_RDR = varQual_RDR pREL_BASE_Name FSLIT(">")
602 ltTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("LT")
603 eqTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
604 gtTag_RDR = dataQual_RDR pREL_BASE_Name FSLIT("GT")
605 max_RDR = varQual_RDR pREL_BASE_Name FSLIT("max")
606 min_RDR = varQual_RDR pREL_BASE_Name FSLIT("min")
607 compare_RDR = varQual_RDR pREL_BASE_Name FSLIT("compare")
608 showList_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList")
609 showList___RDR = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
610 showsPrec_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
611 showSpace_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showSpace")
612 showString_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showString")
613 showParen_RDR = varQual_RDR pREL_SHOW_Name FSLIT("showParen")
615 readsPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readsPrec")
616 readPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readPrec")
617 readListPrec_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrec")
618 readList_RDR = varQual_RDR pREL_READ_Name FSLIT("readList")
620 readListDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListDefault")
621 readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault")
622 parens_RDR = varQual_RDR pREL_READ_Name FSLIT("parens")
623 choose_RDR = varQual_RDR pREL_READ_Name FSLIT("choose")
624 lexP_RDR = varQual_RDR pREL_READ_Name FSLIT("lexP")
627 step_RDR = varQual_RDR rEAD_PREC_Name FSLIT("step")
628 reset_RDR = varQual_RDR rEAD_PREC_Name FSLIT("reset")
629 alt_RDR = varQual_RDR rEAD_PREC_Name FSLIT("+++")
630 prec_RDR = varQual_RDR rEAD_PREC_Name FSLIT("prec")
633 symbol_RDR = dataQual_RDR lEX_Name FSLIT("Symbol")
634 ident_RDR = dataQual_RDR lEX_Name FSLIT("Ident")
635 punc_RDR = dataQual_RDR lEX_Name FSLIT("Punc")
637 times_RDR = varQual_RDR pREL_NUM_Name FSLIT("*")
638 plus_RDR = varQual_RDR pREL_NUM_Name FSLIT("+")
639 negate_RDR = varQual_RDR pREL_NUM_Name FSLIT("negate")
640 range_RDR = varQual_RDR pREL_ARR_Name FSLIT("range")
641 index_RDR = varQual_RDR pREL_ARR_Name FSLIT("index")
642 inRange_RDR = varQual_RDR pREL_ARR_Name FSLIT("inRange")
643 succ_RDR = varQual_RDR pREL_ENUM_Name FSLIT("succ")
644 pred_RDR = varQual_RDR pREL_ENUM_Name FSLIT("pred")
645 minBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
646 maxBound_RDR = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
647 assertErr_RDR = varQual_RDR pREL_ERR_Name FSLIT("assertError")
650 These RDR names also have known keys, so we need to get back the RDR names to
651 populate the occurrence list above.
654 funTyCon_RDR = nameRdrName funTyConName
655 nilCon_RDR = nameRdrName nilDataConName
656 listTyCon_RDR = nameRdrName listTyConName
657 parrTyCon_RDR = nameRdrName parrTyConName
658 ioTyCon_RDR = nameRdrName ioTyConName
659 intTyCon_RDR = nameRdrName intTyConName
660 eq_RDR = nameRdrName eqName
661 ge_RDR = nameRdrName geName
662 numClass_RDR = nameRdrName numClassName
663 ordClass_RDR = nameRdrName ordClassName
664 map_RDR = nameRdrName mapName
665 append_RDR = nameRdrName appendName
666 foldr_RDR = nameRdrName foldrName
667 build_RDR = nameRdrName buildName
668 enumFromTo_RDR = nameRdrName enumFromToName
669 returnM_RDR = nameRdrName returnMName
670 bindM_RDR = nameRdrName bindMName
671 failM_RDR = nameRdrName failMName
672 false_RDR = nameRdrName falseDataConName
673 true_RDR = nameRdrName trueDataConName
674 error_RDR = nameRdrName errorName
675 getTag_RDR = nameRdrName getTagName
676 fromEnum_RDR = nameRdrName fromEnumName
677 toEnum_RDR = nameRdrName toEnumName
678 enumFrom_RDR = nameRdrName enumFromName
679 mkInt_RDR = nameRdrName intDataConName
680 enumFromThen_RDR = nameRdrName enumFromThenName
681 enumFromThenTo_RDR = nameRdrName enumFromThenToName
682 ratioDataCon_RDR = nameRdrName ratioDataConName
683 plusInteger_RDR = nameRdrName plusIntegerName
684 timesInteger_RDR = nameRdrName timesIntegerName
685 enumClass_RDR = nameRdrName enumClassName
686 monadClass_RDR = nameRdrName monadClassName
687 ioDataCon_RDR = nameRdrName ioDataConName
688 cCallableClass_RDR = nameRdrName cCallableClassName
689 cReturnableClass_RDR = nameRdrName cReturnableClassName
690 eqClass_RDR = nameRdrName eqClassName
691 eqString_RDR = nameRdrName eqStringName
692 unpackCString_RDR = nameRdrName unpackCStringName
693 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
694 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
695 deRefStablePtr_RDR = nameRdrName deRefStablePtrName
696 newStablePtr_RDR = nameRdrName newStablePtrName
697 bindIO_RDR = nameRdrName bindIOName
698 returnIO_RDR = nameRdrName returnIOName
699 fromInteger_RDR = nameRdrName fromIntegerName
700 fromRational_RDR = nameRdrName fromRationalName
701 minus_RDR = nameRdrName minusName
704 %************************************************************************
706 \subsection{Local helpers}
708 %************************************************************************
710 All these are original names; hence mkOrig
713 varQual mod str uq = mkKnownKeyExternalName (varQual_RDR mod str) uq
714 dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq
715 tcQual mod str uq = mkKnownKeyExternalName (tcQual_RDR mod str) uq
716 clsQual mod str uq = mkKnownKeyExternalName (clsQual_RDR mod str) uq
718 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) builtinSrcLoc
719 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
720 -- And they don't come from any particular module; indeed we always
721 -- want to print them unqualified. Hence the LocalName
723 varQual_RDR mod str = mkOrig varName mod str
724 tcQual_RDR mod str = mkOrig tcName mod str
725 clsQual_RDR mod str = mkOrig clsName mod str
726 dataQual_RDR mod str = mkOrig dataName mod str
729 %************************************************************************
731 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
733 %************************************************************************
736 boundedClassKey = mkPreludeClassUnique 1
737 enumClassKey = mkPreludeClassUnique 2
738 eqClassKey = mkPreludeClassUnique 3
739 floatingClassKey = mkPreludeClassUnique 5
740 fractionalClassKey = mkPreludeClassUnique 6
741 integralClassKey = mkPreludeClassUnique 7
742 monadClassKey = mkPreludeClassUnique 8
743 functorClassKey = mkPreludeClassUnique 10
744 numClassKey = mkPreludeClassUnique 11
745 ordClassKey = mkPreludeClassUnique 12
746 readClassKey = mkPreludeClassUnique 13
747 realClassKey = mkPreludeClassUnique 14
748 realFloatClassKey = mkPreludeClassUnique 15
749 realFracClassKey = mkPreludeClassUnique 16
750 showClassKey = mkPreludeClassUnique 17
752 cCallableClassKey = mkPreludeClassUnique 18
753 cReturnableClassKey = mkPreludeClassUnique 19
755 ixClassKey = mkPreludeClassUnique 20
758 %************************************************************************
760 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
762 %************************************************************************
765 addrPrimTyConKey = mkPreludeTyConUnique 1
766 addrTyConKey = mkPreludeTyConUnique 2
767 arrayPrimTyConKey = mkPreludeTyConUnique 3
768 boolTyConKey = mkPreludeTyConUnique 4
769 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
770 charPrimTyConKey = mkPreludeTyConUnique 7
771 charTyConKey = mkPreludeTyConUnique 8
772 doublePrimTyConKey = mkPreludeTyConUnique 9
773 doubleTyConKey = mkPreludeTyConUnique 10
774 floatPrimTyConKey = mkPreludeTyConUnique 11
775 floatTyConKey = mkPreludeTyConUnique 12
776 funTyConKey = mkPreludeTyConUnique 13
777 intPrimTyConKey = mkPreludeTyConUnique 14
778 intTyConKey = mkPreludeTyConUnique 15
779 int8TyConKey = mkPreludeTyConUnique 16
780 int16TyConKey = mkPreludeTyConUnique 17
781 int32PrimTyConKey = mkPreludeTyConUnique 18
782 int32TyConKey = mkPreludeTyConUnique 19
783 int64PrimTyConKey = mkPreludeTyConUnique 20
784 int64TyConKey = mkPreludeTyConUnique 21
785 integerTyConKey = mkPreludeTyConUnique 22
786 listTyConKey = mkPreludeTyConUnique 23
787 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
788 weakPrimTyConKey = mkPreludeTyConUnique 27
789 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
790 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
791 orderingTyConKey = mkPreludeTyConUnique 30
792 mVarPrimTyConKey = mkPreludeTyConUnique 31
793 ratioTyConKey = mkPreludeTyConUnique 32
794 rationalTyConKey = mkPreludeTyConUnique 33
795 realWorldTyConKey = mkPreludeTyConUnique 34
796 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
797 stablePtrTyConKey = mkPreludeTyConUnique 36
798 statePrimTyConKey = mkPreludeTyConUnique 50
799 stableNamePrimTyConKey = mkPreludeTyConUnique 51
800 stableNameTyConKey = mkPreludeTyConUnique 52
801 mutableByteArrayTyConKey = mkPreludeTyConUnique 53
802 mutVarPrimTyConKey = mkPreludeTyConUnique 55
803 ioTyConKey = mkPreludeTyConUnique 56
804 byteArrayTyConKey = mkPreludeTyConUnique 57
805 wordPrimTyConKey = mkPreludeTyConUnique 58
806 wordTyConKey = mkPreludeTyConUnique 59
807 word8TyConKey = mkPreludeTyConUnique 60
808 word16TyConKey = mkPreludeTyConUnique 61
809 word32PrimTyConKey = mkPreludeTyConUnique 62
810 word32TyConKey = mkPreludeTyConUnique 63
811 word64PrimTyConKey = mkPreludeTyConUnique 64
812 word64TyConKey = mkPreludeTyConUnique 65
813 liftedConKey = mkPreludeTyConUnique 66
814 unliftedConKey = mkPreludeTyConUnique 67
815 anyBoxConKey = mkPreludeTyConUnique 68
816 kindConKey = mkPreludeTyConUnique 69
817 boxityConKey = mkPreludeTyConUnique 70
818 typeConKey = mkPreludeTyConUnique 71
819 threadIdPrimTyConKey = mkPreludeTyConUnique 72
820 bcoPrimTyConKey = mkPreludeTyConUnique 73
821 ptrTyConKey = mkPreludeTyConUnique 74
822 funPtrTyConKey = mkPreludeTyConUnique 75
824 -- Usage type constructors
825 usageConKey = mkPreludeTyConUnique 76
826 usOnceTyConKey = mkPreludeTyConUnique 77
827 usManyTyConKey = mkPreludeTyConUnique 78
829 -- Generic Type Constructors
830 crossTyConKey = mkPreludeTyConUnique 79
831 plusTyConKey = mkPreludeTyConUnique 80
832 genUnitTyConKey = mkPreludeTyConUnique 81
834 -- Parallel array type constructor
835 parrTyConKey = mkPreludeTyConUnique 82
837 unitTyConKey = mkTupleTyConUnique Boxed 0
840 %************************************************************************
842 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
844 %************************************************************************
847 addrDataConKey = mkPreludeDataConUnique 0
848 charDataConKey = mkPreludeDataConUnique 1
849 consDataConKey = mkPreludeDataConUnique 2
850 doubleDataConKey = mkPreludeDataConUnique 3
851 falseDataConKey = mkPreludeDataConUnique 4
852 floatDataConKey = mkPreludeDataConUnique 5
853 intDataConKey = mkPreludeDataConUnique 6
854 smallIntegerDataConKey = mkPreludeDataConUnique 7
855 largeIntegerDataConKey = mkPreludeDataConUnique 8
856 nilDataConKey = mkPreludeDataConUnique 11
857 ratioDataConKey = mkPreludeDataConUnique 12
858 stablePtrDataConKey = mkPreludeDataConUnique 13
859 stableNameDataConKey = mkPreludeDataConUnique 14
860 trueDataConKey = mkPreludeDataConUnique 15
861 wordDataConKey = mkPreludeDataConUnique 16
862 ioDataConKey = mkPreludeDataConUnique 17
863 ptrDataConKey = mkPreludeDataConUnique 18
864 funPtrDataConKey = mkPreludeDataConUnique 19
866 -- Generic data constructors
867 crossDataConKey = mkPreludeDataConUnique 20
868 inlDataConKey = mkPreludeDataConUnique 21
869 inrDataConKey = mkPreludeDataConUnique 22
870 genUnitDataConKey = mkPreludeDataConUnique 23
872 -- Data constructor for parallel arrays
873 parrDataConKey = mkPreludeDataConUnique 24
876 %************************************************************************
878 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
880 %************************************************************************
883 absentErrorIdKey = mkPreludeMiscIdUnique 1
884 appendIdKey = mkPreludeMiscIdUnique 2
885 augmentIdKey = mkPreludeMiscIdUnique 3
886 buildIdKey = mkPreludeMiscIdUnique 4
887 errorIdKey = mkPreludeMiscIdUnique 5
888 foldlIdKey = mkPreludeMiscIdUnique 6
889 foldrIdKey = mkPreludeMiscIdUnique 7
890 recSelErrIdKey = mkPreludeMiscIdUnique 8
891 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
892 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
893 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
894 integerZeroIdKey = mkPreludeMiscIdUnique 12
895 int2IntegerIdKey = mkPreludeMiscIdUnique 13
896 seqIdKey = mkPreludeMiscIdUnique 14
897 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
898 eqStringIdKey = mkPreludeMiscIdUnique 16
899 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
900 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
901 runtimeErrorIdKey = mkPreludeMiscIdUnique 19
902 parErrorIdKey = mkPreludeMiscIdUnique 20
903 parIdKey = mkPreludeMiscIdUnique 21
904 patErrorIdKey = mkPreludeMiscIdUnique 22
905 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
906 recConErrorIdKey = mkPreludeMiscIdUnique 24
907 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
908 traceIdKey = mkPreludeMiscIdUnique 26
909 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
910 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
911 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
912 unpackCStringIdKey = mkPreludeMiscIdUnique 30
913 ushowListIdKey = mkPreludeMiscIdUnique 31
914 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
915 concatIdKey = mkPreludeMiscIdUnique 33
916 filterIdKey = mkPreludeMiscIdUnique 34
917 zipIdKey = mkPreludeMiscIdUnique 35
918 bindIOIdKey = mkPreludeMiscIdUnique 36
919 returnIOIdKey = mkPreludeMiscIdUnique 37
920 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
921 newStablePtrIdKey = mkPreludeMiscIdUnique 39
922 getTagIdKey = mkPreludeMiscIdUnique 40
923 plusIntegerIdKey = mkPreludeMiscIdUnique 41
924 timesIntegerIdKey = mkPreludeMiscIdUnique 42
925 printIdKey = mkPreludeMiscIdUnique 43
926 failIOIdKey = mkPreludeMiscIdUnique 44
927 nullAddrIdKey = mkPreludeMiscIdUnique 46
928 voidArgIdKey = mkPreludeMiscIdUnique 47
929 splitIdKey = mkPreludeMiscIdUnique 48
930 fstIdKey = mkPreludeMiscIdUnique 49
931 sndIdKey = mkPreludeMiscIdUnique 50
932 otherwiseIdKey = mkPreludeMiscIdUnique 51
933 mapIdKey = mkPreludeMiscIdUnique 52
934 assertIdKey = mkPreludeMiscIdUnique 53
935 runSTRepIdKey = mkPreludeMiscIdUnique 54
937 dollarMainKey = mkPreludeMiscIdUnique 55
938 runMainKey = mkPreludeMiscIdUnique 56
940 andIdKey = mkPreludeMiscIdUnique 57
941 orIdKey = mkPreludeMiscIdUnique 58
942 thenIOIdKey = mkPreludeMiscIdUnique 59
943 lazyIdKey = mkPreludeMiscIdUnique 60
945 -- Parallel array functions
946 nullPIdKey = mkPreludeMiscIdUnique 70
947 lengthPIdKey = mkPreludeMiscIdUnique 71
948 replicatePIdKey = mkPreludeMiscIdUnique 72
949 mapPIdKey = mkPreludeMiscIdUnique 73
950 filterPIdKey = mkPreludeMiscIdUnique 74
951 zipPIdKey = mkPreludeMiscIdUnique 75
952 crossPIdKey = mkPreludeMiscIdUnique 76
953 indexPIdKey = mkPreludeMiscIdUnique 77
954 toPIdKey = mkPreludeMiscIdUnique 78
955 enumFromToPIdKey = mkPreludeMiscIdUnique 79
956 enumFromThenToPIdKey = mkPreludeMiscIdUnique 80
957 bpermutePIdKey = mkPreludeMiscIdUnique 81
958 bpermuteDftPIdKey = mkPreludeMiscIdUnique 82
959 indexOfPIdKey = mkPreludeMiscIdUnique 83
962 Certain class operations from Prelude classes. They get their own
963 uniques so we can look them up easily when we want to conjure them up
964 during type checking.
967 -- Just a place holder for unbound variables produced by the renamer:
968 unboundKey = mkPreludeMiscIdUnique 101
969 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
970 minusClassOpKey = mkPreludeMiscIdUnique 103
971 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
972 enumFromClassOpKey = mkPreludeMiscIdUnique 105
973 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
974 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
975 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
976 eqClassOpKey = mkPreludeMiscIdUnique 109
977 geClassOpKey = mkPreludeMiscIdUnique 110
978 negateClassOpKey = mkPreludeMiscIdUnique 111
979 failMClassOpKey = mkPreludeMiscIdUnique 112
980 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
981 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
982 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
983 returnMClassOpKey = mkPreludeMiscIdUnique 117
984 toEnumClassOpKey = mkPreludeMiscIdUnique 119
988 %************************************************************************
990 \subsection{Standard groups of types}
992 %************************************************************************
1004 -- Renamer always imports these data decls replete with constructors
1005 -- so that desugarer can always see their constructors. Ugh!
1010 , mutableByteArrayTyConKey
1024 %************************************************************************
1026 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1028 %************************************************************************
1030 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1033 @derivingOccurrences@ maps a class name to a list of the (qualified)
1034 occurrences that will be mentioned by the derived code for the class
1035 when it is later generated. We don't need to put in things that are
1036 WiredIn (because they are already mapped to their correct name by the
1037 @NameSupply@. The class itself, and all its class ops, is already
1038 flagged as an occurrence so we don't need to mention that either.
1040 @derivingOccurrences@ has an item for every derivable class, even if
1041 that item is empty, because we treat lookup failure as indicating that
1042 the class is illegal in a deriving clause.
1045 derivingOccurrences :: UniqFM [RdrName]
1046 derivingOccurrences = listToUFM deriving_occ_info
1048 derivableClassKeys = map fst deriving_occ_info
1051 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
1052 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR, error_RDR])
1053 -- EQ (from Ordering) is needed to force in the constructors
1054 -- as well as the type constructor.
1055 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR,
1056 error_RDR, showsPrec_RDR, append_RDR])
1057 -- The last two Enum deps are only used to produce better
1058 -- error msgs for derived toEnum methods.
1059 , (boundedClassKey, [intTyCon_RDR])
1060 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
1061 showParen_RDR, showSpace_RDR, showList___RDR])
1062 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR,
1063 lexP_RDR, readPrec_RDR,
1064 readListDefault_RDR, readListPrecDefault_RDR,
1065 step_RDR, parens_RDR, reset_RDR, prec_RDR, alt_RDR, choose_RDR,
1066 ident_RDR, -- Pulls in the entire Lex.Lexeme data type
1067 bindM_RDR -- Pulls in the entire Monad class decl
1069 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR, error_RDR,
1070 foldr_RDR, build_RDR,
1071 -- foldr and build required for list comprehension used
1072 -- with single constructor types -- KSW 2000-06
1073 returnM_RDR, failM_RDR])
1074 -- the last two are needed to force returnM, thenM and failM
1075 -- in before typechecking the list(monad) comprehension
1076 -- generated for derived Ix instances (range method)
1077 -- of single constructor types. -- SOF 8/97
1079 -- intTyCon: Practically any deriving needs Int, either for index calculations,
1081 -- ordClass: really it's the methods that are actually used.
1082 -- numClass: for Int literals
1086 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1087 even though every numeric class has these two as a superclass,
1088 because the list of ambiguous dictionaries hasn't been simplified.
1096 ++ fractionalClassKeys
1098 fractionalClassKeys =
1099 [ fractionalClassKey
1105 -- the strictness analyser needs to know about numeric types
1106 -- (see SaAbsInt.lhs)
1107 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1113 , cReturnableClassKey
1117 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1119 -- We have to have "CCallable" and "CReturnable" in the standard
1120 -- classes, so that if you go...
1122 -- _ccall_ foo ... 93{-numeric literal-} ...
1124 -- ... it can do The Right Thing on the 93.
1126 noDictClassKeys -- These classes are used only for type annotations;
1127 -- they are not implemented by dictionaries, ever.