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, mkLocalName, mkKnownKeyGlobal, 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 = mkLocalName 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 = mkLocalName 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 pREL_GHC_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_SPLIT_Name = mkModuleName "GHC.Split"
245 pREL_ADDR_Name = mkModuleName "GHC.Addr"
246 pREL_PTR_Name = mkModuleName "GHC.Ptr"
247 pREL_ERR_Name = mkModuleName "GHC.Err"
248 pREL_REAL_Name = mkModuleName "GHC.Real"
249 pREL_FLOAT_Name = mkModuleName "GHC.Float"
250 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
251 sYSTEM_IO_Name = mkModuleName "System.IO"
253 mAIN_Name = mkModuleName "Main"
254 pREL_INT_Name = mkModuleName "GHC.Int"
255 pREL_WORD_Name = mkModuleName "GHC.Word"
257 fOREIGNOBJ_Name = mkModuleName "ForeignObj"
258 aDDR_Name = mkModuleName "Addr"
260 gLA_EXTS_Name = mkModuleName "GlaExts"
262 pREL_GHC = mkPrelModule pREL_GHC_Name
263 pREL_BASE = mkPrelModule pREL_BASE_Name
264 pREL_ADDR = mkPrelModule pREL_ADDR_Name
265 pREL_PTR = mkPrelModule pREL_PTR_Name
266 pREL_STABLE = mkPrelModule pREL_STABLE_Name
267 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
268 pREL_PACK = mkPrelModule pREL_PACK_Name
269 pREL_ERR = mkPrelModule pREL_ERR_Name
270 pREL_NUM = mkPrelModule pREL_NUM_Name
271 pREL_REAL = mkPrelModule pREL_REAL_Name
272 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
273 pRELUDE = mkPrelModule pRELUDE_Name
275 iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive")
278 %************************************************************************
280 \subsection{Constructing the names of tuples
282 %************************************************************************
285 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
287 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
288 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
289 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)") -- not strictly necessary
290 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)") -- ditto
291 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
292 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
294 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
295 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
296 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
297 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
298 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
299 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
301 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
302 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
303 (mod, occ) -> mkOrig space mod occ
307 %************************************************************************
309 \subsection{Unqualified RdrNames}
311 %************************************************************************
314 main_RDR_Unqual :: RdrName
315 main_RDR_Unqual = mkUnqual varName FSLIT("main")
316 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
317 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
322 %************************************************************************
324 \subsection{Commonly-used RdrNames}
326 %************************************************************************
328 Many of these Names are not really "built in", but some parts of the
329 compiler (notably the deriving mechanism) need to mention their names,
330 and it's convenient to write them all down in one place.
333 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
334 runMainName = varQual pREL_TOP_HANDLER_Name FSLIT("runMain") runMainKey
336 -- Stuff from PrelGHC
337 usOnceTyConName = kindQual FSLIT(".") usOnceTyConKey
338 usManyTyConName = kindQual FSLIT("!") usManyTyConKey
339 superKindName = kindQual FSLIT("KX") kindConKey
340 superBoxityName = kindQual FSLIT("BX") boxityConKey
341 liftedConName = kindQual FSLIT("*") liftedConKey
342 unliftedConName = kindQual FSLIT("#") unliftedConKey
343 openKindConName = kindQual FSLIT("?") anyBoxConKey
344 usageKindConName = kindQual FSLIT("$") usageConKey
345 typeConName = kindQual FSLIT("Type") typeConKey
347 funTyConName = tcQual pREL_GHC_Name FSLIT("(->)") funTyConKey
348 charPrimTyConName = tcQual pREL_GHC_Name FSLIT("Char#") charPrimTyConKey
349 intPrimTyConName = tcQual pREL_GHC_Name FSLIT("Int#") intPrimTyConKey
350 int32PrimTyConName = tcQual pREL_GHC_Name FSLIT("Int32#") int32PrimTyConKey
351 int64PrimTyConName = tcQual pREL_GHC_Name FSLIT("Int64#") int64PrimTyConKey
352 wordPrimTyConName = tcQual pREL_GHC_Name FSLIT("Word#") wordPrimTyConKey
353 word32PrimTyConName = tcQual pREL_GHC_Name FSLIT("Word32#") word32PrimTyConKey
354 word64PrimTyConName = tcQual pREL_GHC_Name FSLIT("Word64#") word64PrimTyConKey
355 addrPrimTyConName = tcQual pREL_GHC_Name FSLIT("Addr#") addrPrimTyConKey
356 floatPrimTyConName = tcQual pREL_GHC_Name FSLIT("Float#") floatPrimTyConKey
357 doublePrimTyConName = tcQual pREL_GHC_Name FSLIT("Double#") doublePrimTyConKey
358 statePrimTyConName = tcQual pREL_GHC_Name FSLIT("State#") statePrimTyConKey
359 realWorldTyConName = tcQual pREL_GHC_Name FSLIT("RealWorld") realWorldTyConKey
360 arrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("Array#") arrayPrimTyConKey
361 byteArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("ByteArray#") byteArrayPrimTyConKey
362 mutableArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey
363 mutableByteArrayPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
364 mutVarPrimTyConName = tcQual pREL_GHC_Name FSLIT("MutVar#") mutVarPrimTyConKey
365 mVarPrimTyConName = tcQual pREL_GHC_Name FSLIT("MVar#") mVarPrimTyConKey
366 stablePtrPrimTyConName = tcQual pREL_GHC_Name FSLIT("StablePtr#") stablePtrPrimTyConKey
367 stableNamePrimTyConName = tcQual pREL_GHC_Name FSLIT("StableName#") stableNamePrimTyConKey
368 foreignObjPrimTyConName = tcQual pREL_GHC_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey
369 bcoPrimTyConName = tcQual pREL_GHC_Name FSLIT("BCO#") bcoPrimTyConKey
370 weakPrimTyConName = tcQual pREL_GHC_Name FSLIT("Weak#") weakPrimTyConKey
371 threadIdPrimTyConName = tcQual pREL_GHC_Name FSLIT("ThreadId#") threadIdPrimTyConKey
372 cCallableClassName = clsQual pREL_GHC_Name FSLIT("CCallable") cCallableClassKey
373 cReturnableClassName = clsQual pREL_GHC_Name FSLIT("CReturnable") cReturnableClassKey
375 -- PrelBase data types and constructors
376 charTyConName = tcQual pREL_BASE_Name FSLIT("Char") charTyConKey
377 charDataConName = dataQual pREL_BASE_Name FSLIT("C#") charDataConKey
378 intTyConName = tcQual pREL_BASE_Name FSLIT("Int") intTyConKey
379 intDataConName = dataQual pREL_BASE_Name FSLIT("I#") intDataConKey
380 orderingTyConName = tcQual pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
381 boolTyConName = tcQual pREL_BASE_Name FSLIT("Bool") boolTyConKey
382 falseDataConName = dataQual pREL_BASE_Name FSLIT("False") falseDataConKey
383 trueDataConName = dataQual pREL_BASE_Name FSLIT("True") trueDataConKey
384 listTyConName = tcQual pREL_BASE_Name FSLIT("[]") listTyConKey
385 nilDataConName = dataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
386 consDataConName = dataQual pREL_BASE_Name FSLIT(":") consDataConKey
389 fstName = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
390 sndName = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
393 crossTyConName = tcQual pREL_BASE_Name FSLIT(":*:") crossTyConKey
394 crossDataConName = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
395 plusTyConName = tcQual pREL_BASE_Name FSLIT(":+:") plusTyConKey
396 inlDataConName = dataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
397 inrDataConName = dataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
398 genUnitTyConName = tcQual pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
399 genUnitDataConName = dataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
401 -- Random PrelBase functions
402 unsafeCoerceName = varQual pREL_BASE_Name FSLIT("unsafeCoerce")
404 otherwiseIdName = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
405 appendName = varQual pREL_BASE_Name FSLIT("++") appendIdKey
406 foldrName = varQual pREL_BASE_Name FSLIT("foldr") foldrIdKey
407 mapName = varQual pREL_BASE_Name FSLIT("map") mapIdKey
408 buildName = varQual pREL_BASE_Name FSLIT("build") buildIdKey
409 augmentName = varQual pREL_BASE_Name FSLIT("augment") augmentIdKey
410 eqStringName = varQual pREL_BASE_Name FSLIT("eqString") eqStringIdKey
411 andName = varQual pREL_BASE_Name FSLIT("&&") andIdKey
412 orName = varQual pREL_BASE_Name FSLIT("||") orIdKey
415 unpackCStringName = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
416 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
417 unpackCStringFoldrName = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
418 unpackCStringUtf8Name = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
420 -- Classes Eq and Ord
421 eqClassName = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
422 ordClassName = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
423 eqName = varQual pREL_BASE_Name FSLIT("==") eqClassOpKey
424 geName = varQual pREL_BASE_Name FSLIT(">=") geClassOpKey
427 monadClassName = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
428 thenMName = varQual pREL_BASE_Name FSLIT(">>=") thenMClassOpKey
429 returnMName = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
430 failMName = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
433 functorClassName = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
436 showClassName = clsQual pREL_SHOW_Name FSLIT("Show") showClassKey
439 readClassName = clsQual pREL_READ_Name FSLIT("Read") readClassKey
442 numClassName = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
443 fromIntegerName = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
444 minusName = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
445 negateName = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
446 plusIntegerName = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
447 timesIntegerName = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
448 integerTyConName = tcQual pREL_NUM_Name FSLIT("Integer") integerTyConKey
449 smallIntegerDataConName = dataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
450 largeIntegerDataConName = dataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
452 -- PrelReal types and classes
453 rationalTyConName = tcQual pREL_REAL_Name FSLIT("Rational") rationalTyConKey
454 ratioTyConName = tcQual pREL_REAL_Name FSLIT("Ratio") ratioTyConKey
455 ratioDataConName = dataQual pREL_REAL_Name FSLIT(":%") ratioDataConKey
456 realClassName = clsQual pREL_REAL_Name FSLIT("Real") realClassKey
457 integralClassName = clsQual pREL_REAL_Name FSLIT("Integral") integralClassKey
458 realFracClassName = clsQual pREL_REAL_Name FSLIT("RealFrac") realFracClassKey
459 fractionalClassName = clsQual pREL_REAL_Name FSLIT("Fractional") fractionalClassKey
460 fromRationalName = varQual pREL_REAL_Name FSLIT("fromRational") fromRationalClassOpKey
463 floatTyConName = tcQual pREL_FLOAT_Name FSLIT("Float") floatTyConKey
464 floatDataConName = dataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
465 doubleTyConName = tcQual pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
466 doubleDataConName = dataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
467 floatingClassName = clsQual pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
468 realFloatClassName = clsQual pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
471 ixClassName = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
474 enumClassName = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
475 toEnumName = varQual pREL_ENUM_Name FSLIT("toEnum") toEnumClassOpKey
476 fromEnumName = varQual pREL_ENUM_Name FSLIT("fromEnum") fromEnumClassOpKey
477 enumFromName = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
478 enumFromToName = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
479 enumFromThenName = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
480 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
482 -- Overloaded via Class Enum
483 enumFromToPName = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
484 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
487 boundedClassName = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
490 concatName = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
491 filterName = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
492 zipName = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
494 -- parallel array types and functions
495 parrTyConName = tcQual pREL_PARR_Name FSLIT("[::]") parrTyConKey
496 parrDataConName = dataQual pREL_PARR_Name FSLIT("PArr") parrDataConKey
497 nullPName = varQual pREL_PARR_Name FSLIT("nullP") nullPIdKey
498 lengthPName = varQual pREL_PARR_Name FSLIT("lengthP") lengthPIdKey
499 replicatePName = varQual pREL_PARR_Name FSLIT("replicateP") replicatePIdKey
500 mapPName = varQual pREL_PARR_Name FSLIT("mapP") mapPIdKey
501 filterPName = varQual pREL_PARR_Name FSLIT("filterP") filterPIdKey
502 zipPName = varQual pREL_PARR_Name FSLIT("zipP") zipPIdKey
503 crossPName = varQual pREL_PARR_Name FSLIT("crossP") crossPIdKey
504 indexPName = varQual pREL_PARR_Name FSLIT("!:") indexPIdKey
505 toPName = varQual pREL_PARR_Name FSLIT("toP") toPIdKey
506 bpermutePName = varQual pREL_PARR_Name FSLIT("bpermuteP") bpermutePIdKey
507 bpermuteDftPName = varQual pREL_PARR_Name FSLIT("bpermuteDftP")
509 indexOfPName = varQual pREL_PARR_Name FSLIT("indexOfP") indexOfPIdKey
512 ioTyConName = tcQual pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
513 ioDataConName = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
514 bindIOName = varQual pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
515 returnIOName = varQual pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
516 failIOName = varQual pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
519 printName = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
521 -- Int, Word, and Addr things
522 int8TyConName = tcQual pREL_INT_Name FSLIT("Int8") int8TyConKey
523 int16TyConName = tcQual pREL_INT_Name FSLIT("Int16") int16TyConKey
524 int32TyConName = tcQual pREL_INT_Name FSLIT("Int32") int32TyConKey
525 int64TyConName = tcQual pREL_INT_Name FSLIT("Int64") int64TyConKey
527 word8TyConName = tcQual pREL_WORD_Name FSLIT("Word8") word8TyConKey
528 word16TyConName = tcQual pREL_WORD_Name FSLIT("Word16") word16TyConKey
529 word32TyConName = tcQual pREL_WORD_Name FSLIT("Word32") word32TyConKey
530 word64TyConName = tcQual pREL_WORD_Name FSLIT("Word64") word64TyConKey
532 wordTyConName = tcQual pREL_WORD_Name FSLIT("Word") wordTyConKey
533 wordDataConName = dataQual pREL_WORD_Name FSLIT("W#") wordDataConKey
535 addrTyConName = tcQual aDDR_Name FSLIT("Addr") addrTyConKey
536 addrDataConName = dataQual aDDR_Name FSLIT("A#") addrDataConKey
538 ptrTyConName = tcQual pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
539 ptrDataConName = dataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
541 funPtrTyConName = tcQual pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
542 funPtrDataConName = dataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
545 byteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("ByteArray") byteArrayTyConKey
546 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name FSLIT("MutableByteArray") mutableByteArrayTyConKey
548 -- Foreign objects and weak pointers
549 foreignObjTyConName = tcQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjTyConKey
550 foreignObjDataConName = dataQual fOREIGNOBJ_Name FSLIT("ForeignObj") foreignObjDataConKey
551 foreignPtrTyConName = tcQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrTyConKey
552 foreignPtrDataConName = dataQual fOREIGN_PTR_Name FSLIT("ForeignPtr") foreignPtrDataConKey
553 stablePtrTyConName = tcQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
554 stablePtrDataConName = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
555 deRefStablePtrName = varQual pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
556 newStablePtrName = varQual pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
558 errorName = varQual pREL_ERR_Name FSLIT("error") errorIdKey
559 assertName = varQual pREL_GHC_Name FSLIT("assert") assertIdKey
560 getTagName = varQual pREL_GHC_Name FSLIT("getTag#") getTagIdKey
561 runSTRepName = varQual pREL_ST_Name FSLIT("runSTRep") runSTRepIdKey
563 -- The "split" Id for splittable implicit parameters
564 splitName = varQual pREL_SPLIT_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 = mkKnownKeyGlobal (varQual_RDR mod str) uq
693 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
694 tcQual mod str uq = mkKnownKeyGlobal (tcQual_RDR mod str) uq
695 clsQual mod str uq = mkKnownKeyGlobal (clsQual_RDR mod str) uq
697 kindQual str uq = mkLocalName 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.