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 SyntaxMap, vanillaSyntaxMap, SyntaxList, syntaxList,
27 ------------------------------------------------------------
28 -- Goups of classes and types
29 needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
30 fractionalClassKeys, numericClassKeys, standardClassKeys,
31 derivingOccurrences, -- For a given class C, this tells what other
32 derivableClassKeys, -- things are needed as a result of a
34 numericTyKeys, cCallishTyKeys,
36 mkUnboundName, isUnboundName
39 #include "HsVersions.h"
41 import Module ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName )
42 import OccName ( NameSpace, UserFS, varName, dataName, tcName, clsName,
45 import RdrName ( RdrName, mkOrig, mkUnqual )
47 import Unique ( Unique, Uniquable(..), hasKey,
48 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
49 mkPreludeTyConUnique, mkPreludeClassUnique
51 import BasicTypes ( Boxity(..), Arity )
52 import UniqFM ( UniqFM, listToUFM )
53 import Name ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
54 import RdrName ( rdrNameOcc )
55 import SrcLoc ( builtinSrcLoc, noSrcLoc )
56 import Util ( nOfThem )
57 import Panic ( panic )
61 %************************************************************************
63 \subsection{Local Names}
65 %************************************************************************
67 This *local* name is used by the interactive stuff
70 itName uniq = mkLocalName uniq (mkOccFS varName SLIT("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 = mkLocalName 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)
106 mutableByteArrayTyConName,
111 stablePtrDataConName,
113 -- Classes. *Must* include:
114 -- classes that are grabbed by key (e.g., eqClassKey)
115 -- classes in "Class.standardClassKeys" (quite a few)
116 eqClassName, -- mentioned, derivable
117 ordClassName, -- derivable
118 boundedClassName, -- derivable
119 numClassName, -- mentioned, numeric
120 enumClassName, -- derivable
124 showClassName, -- derivable
125 realClassName, -- numeric
126 integralClassName, -- numeric
127 fractionalClassName, -- numeric
128 floatingClassName, -- numeric
129 realFracClassName, -- numeric
130 realFloatClassName, -- numeric
131 readClassName, -- derivable
132 ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm)
133 cCallableClassName, -- mentioned, ccallish
134 cReturnableClassName, -- mentioned, ccallish
163 unpackCStringAppendName,
164 unpackCStringFoldrName,
165 unpackCStringUtf8Name,
175 -- FFI primitive types that are not wired-in.
198 %************************************************************************
200 \subsection{Module names}
202 %************************************************************************
205 pRELUDE_Name = mkModuleName "Prelude"
206 pREL_GHC_Name = mkModuleName "PrelGHC" -- Primitive types and values
207 pREL_BASE_Name = mkModuleName "PrelBase"
208 pREL_ENUM_Name = mkModuleName "PrelEnum"
209 pREL_SHOW_Name = mkModuleName "PrelShow"
210 pREL_READ_Name = mkModuleName "PrelRead"
211 pREL_NUM_Name = mkModuleName "PrelNum"
212 pREL_LIST_Name = mkModuleName "PrelList"
213 pREL_TUP_Name = mkModuleName "PrelTup"
214 pREL_PACK_Name = mkModuleName "PrelPack"
215 pREL_CONC_Name = mkModuleName "PrelConc"
216 pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
217 pREL_IO_Name = mkModuleName "PrelIO"
218 pREL_ST_Name = mkModuleName "PrelST"
219 pREL_ARR_Name = mkModuleName "PrelArr"
220 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
221 pREL_FOREIGN_Name = mkModuleName "PrelForeign"
222 pREL_STABLE_Name = mkModuleName "PrelStable"
223 pREL_ADDR_Name = mkModuleName "PrelAddr"
224 pREL_PTR_Name = mkModuleName "PrelPtr"
225 pREL_ERR_Name = mkModuleName "PrelErr"
226 pREL_REAL_Name = mkModuleName "PrelReal"
227 pREL_FLOAT_Name = mkModuleName "PrelFloat"
229 pREL_MAIN_Name = mkModuleName "PrelMain"
230 mAIN_Name = mkModuleName "Main"
231 pREL_INT_Name = mkModuleName "PrelInt"
232 pREL_WORD_Name = mkModuleName "PrelWord"
234 fOREIGNOBJ_Name = mkModuleName "ForeignObj"
235 aDDR_Name = mkModuleName "Addr"
237 pREL_GHC = mkPrelModule pREL_GHC_Name
238 pREL_BASE = mkPrelModule pREL_BASE_Name
239 pREL_ADDR = mkPrelModule pREL_ADDR_Name
240 pREL_PTR = mkPrelModule pREL_PTR_Name
241 pREL_STABLE = mkPrelModule pREL_STABLE_Name
242 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
243 pREL_PACK = mkPrelModule pREL_PACK_Name
244 pREL_ERR = mkPrelModule pREL_ERR_Name
245 pREL_NUM = mkPrelModule pREL_NUM_Name
246 pREL_REAL = mkPrelModule pREL_REAL_Name
247 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
249 iNTERACTIVE = mkHomeModule (mkModuleName "$Interactive")
252 %************************************************************************
254 \subsection{Constructing the names of tuples
256 %************************************************************************
259 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
261 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
262 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
263 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)") -- not strictly necessary
264 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)") -- ditto
265 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
266 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
268 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
269 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
270 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
271 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
272 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
273 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
275 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
276 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
277 (mod, occ) -> mkOrig space mod occ
281 %************************************************************************
283 \subsection{Unqualified RdrNames}
285 %************************************************************************
288 main_RDR_Unqual :: RdrName
289 main_RDR_Unqual = mkUnqual varName SLIT("main")
290 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
291 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
296 %************************************************************************
298 \subsection{Commonly-used RdrNames}
300 %************************************************************************
302 Many of these Names are not really "built in", but some parts of the
303 compiler (notably the deriving mechanism) need to mention their names,
304 and it's convenient to write them all down in one place.
307 mainName = varQual mAIN_Name SLIT("main") mainKey
309 -- Stuff from PrelGHC
310 usOnceTyConName = kindQual SLIT(".") usOnceTyConKey
311 usManyTyConName = kindQual SLIT("!") usManyTyConKey
312 superKindName = kindQual SLIT("KX") kindConKey
313 superBoxityName = kindQual SLIT("BX") boxityConKey
314 liftedConName = kindQual SLIT("*") liftedConKey
315 unliftedConName = kindQual SLIT("#") unliftedConKey
316 openKindConName = kindQual SLIT("?") anyBoxConKey
317 usageKindConName = kindQual SLIT("$") usageConKey
318 typeConName = kindQual SLIT("Type") typeConKey
320 funTyConName = tcQual pREL_GHC_Name SLIT("(->)") funTyConKey
321 charPrimTyConName = tcQual pREL_GHC_Name SLIT("Char#") charPrimTyConKey
322 intPrimTyConName = tcQual pREL_GHC_Name SLIT("Int#") intPrimTyConKey
323 int64PrimTyConName = tcQual pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey
324 wordPrimTyConName = tcQual pREL_GHC_Name SLIT("Word#") wordPrimTyConKey
325 word64PrimTyConName = tcQual pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey
326 addrPrimTyConName = tcQual pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey
327 floatPrimTyConName = tcQual pREL_GHC_Name SLIT("Float#") floatPrimTyConKey
328 doublePrimTyConName = tcQual pREL_GHC_Name SLIT("Double#") doublePrimTyConKey
329 statePrimTyConName = tcQual pREL_GHC_Name SLIT("State#") statePrimTyConKey
330 realWorldTyConName = tcQual pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey
331 arrayPrimTyConName = tcQual pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey
332 byteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey
333 mutableArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey
334 mutableByteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
335 mutVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey
336 mVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey
337 stablePtrPrimTyConName = tcQual pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey
338 stableNamePrimTyConName = tcQual pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey
339 foreignObjPrimTyConName = tcQual pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey
340 bcoPrimTyConName = tcQual pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey
341 weakPrimTyConName = tcQual pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey
342 threadIdPrimTyConName = tcQual pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey
343 cCallableClassName = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
344 cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
346 -- PrelBase data types and constructors
347 charTyConName = tcQual pREL_BASE_Name SLIT("Char") charTyConKey
348 charDataConName = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
349 intTyConName = tcQual pREL_BASE_Name SLIT("Int") intTyConKey
350 intDataConName = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
351 orderingTyConName = tcQual pREL_BASE_Name SLIT("Ordering") orderingTyConKey
352 boolTyConName = tcQual pREL_BASE_Name SLIT("Bool") boolTyConKey
353 falseDataConName = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
354 trueDataConName = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
355 listTyConName = tcQual pREL_BASE_Name SLIT("[]") listTyConKey
356 nilDataConName = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
357 consDataConName = dataQual pREL_BASE_Name SLIT(":") consDataConKey
360 crossTyConName = tcQual pREL_BASE_Name SLIT(":*:") crossTyConKey
361 crossDataConName = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
362 plusTyConName = tcQual pREL_BASE_Name SLIT(":+:") plusTyConKey
363 inlDataConName = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
364 inrDataConName = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
365 genUnitTyConName = tcQual pREL_BASE_Name SLIT("Unit") genUnitTyConKey
366 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
368 -- Random PrelBase functions
369 unsafeCoerceName = varQual pREL_BASE_Name SLIT("unsafeCoerce") unsafeCoerceIdKey
370 otherwiseIdName = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
371 appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
372 foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
373 mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
374 buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
375 augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
376 eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
379 unpackCStringName = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
380 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
381 unpackCStringFoldrName = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
382 unpackCStringUtf8Name = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
384 -- Classes Eq and Ord
385 eqClassName = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
386 ordClassName = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
387 eqName = varQual pREL_BASE_Name SLIT("==") eqClassOpKey
388 geName = varQual pREL_BASE_Name SLIT(">=") geClassOpKey
391 monadClassName = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
392 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
393 thenMName = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
394 returnMName = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
395 failMName = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
398 functorClassName = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
401 showClassName = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
404 readClassName = clsQual pREL_READ_Name SLIT("Read") readClassKey
407 numClassName = clsQual pREL_NUM_Name SLIT("Num") numClassKey
408 fromIntegerName = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
409 minusName = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
410 negateName = varQual pREL_NUM_Name SLIT("negate") negateClassOpKey
411 plusIntegerName = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
412 timesIntegerName = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
413 integerTyConName = tcQual pREL_NUM_Name SLIT("Integer") integerTyConKey
414 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
415 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
417 -- PrelReal types and classes
418 rationalTyConName = tcQual pREL_REAL_Name SLIT("Rational") rationalTyConKey
419 ratioTyConName = tcQual pREL_REAL_Name SLIT("Ratio") ratioTyConKey
420 ratioDataConName = dataQual pREL_REAL_Name SLIT(":%") ratioDataConKey
421 realClassName = clsQual pREL_REAL_Name SLIT("Real") realClassKey
422 integralClassName = clsQual pREL_REAL_Name SLIT("Integral") integralClassKey
423 realFracClassName = clsQual pREL_REAL_Name SLIT("RealFrac") realFracClassKey
424 fractionalClassName = clsQual pREL_REAL_Name SLIT("Fractional") fractionalClassKey
425 fromRationalName = varQual pREL_REAL_Name SLIT("fromRational") fromRationalClassOpKey
428 floatTyConName = tcQual pREL_FLOAT_Name SLIT("Float") floatTyConKey
429 floatDataConName = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
430 doubleTyConName = tcQual pREL_FLOAT_Name SLIT("Double") doubleTyConKey
431 doubleDataConName = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
432 floatingClassName = clsQual pREL_FLOAT_Name SLIT("Floating") floatingClassKey
433 realFloatClassName = clsQual pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
436 ixClassName = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
439 enumClassName = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
440 toEnumName = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
441 fromEnumName = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
442 enumFromName = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
443 enumFromToName = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
444 enumFromThenName = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
445 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
448 boundedClassName = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
451 concatName = varQual pREL_LIST_Name SLIT("concat") concatIdKey
452 filterName = varQual pREL_LIST_Name SLIT("filter") filterIdKey
453 zipName = varQual pREL_LIST_Name SLIT("zip") zipIdKey
456 ioTyConName = tcQual pREL_IO_BASE_Name SLIT("IO") ioTyConKey
457 ioDataConName = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
458 bindIOName = varQual pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
459 returnIOName = varQual pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
460 failIOName = varQual pREL_IO_BASE_Name SLIT("failIO") failIOIdKey
463 printName = varQual pREL_IO_Name SLIT("print") printIdKey
465 -- Int, Word, and Addr things
466 int8TyConName = tcQual pREL_INT_Name SLIT("Int8") int8TyConKey
467 int16TyConName = tcQual pREL_INT_Name SLIT("Int16") int16TyConKey
468 int32TyConName = tcQual pREL_INT_Name SLIT("Int32") int32TyConKey
469 int64TyConName = tcQual pREL_INT_Name SLIT("Int64") int64TyConKey
471 word8TyConName = tcQual pREL_WORD_Name SLIT("Word8") word8TyConKey
472 word16TyConName = tcQual pREL_WORD_Name SLIT("Word16") word16TyConKey
473 word32TyConName = tcQual pREL_WORD_Name SLIT("Word32") word32TyConKey
474 word64TyConName = tcQual pREL_WORD_Name SLIT("Word64") word64TyConKey
476 wordTyConName = tcQual pREL_WORD_Name SLIT("Word") wordTyConKey
477 wordDataConName = dataQual pREL_WORD_Name SLIT("W#") wordDataConKey
479 addrTyConName = tcQual aDDR_Name SLIT("Addr") addrTyConKey
480 addrDataConName = dataQual aDDR_Name SLIT("A#") addrDataConKey
482 ptrTyConName = tcQual pREL_PTR_Name SLIT("Ptr") ptrTyConKey
483 ptrDataConName = dataQual pREL_PTR_Name SLIT("Ptr") ptrDataConKey
485 funPtrTyConName = tcQual pREL_PTR_Name SLIT("FunPtr") funPtrTyConKey
486 funPtrDataConName = dataQual pREL_PTR_Name SLIT("FunPtr") funPtrDataConKey
489 byteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("ByteArray") byteArrayTyConKey
490 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("MutableByteArray") mutableByteArrayTyConKey
492 -- Forign objects and weak pointers
493 foreignObjTyConName = tcQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjTyConKey
494 foreignObjDataConName = dataQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjDataConKey
495 foreignPtrTyConName = tcQual pREL_FOREIGN_Name SLIT("ForeignPtr") foreignPtrTyConKey
496 foreignPtrDataConName = dataQual pREL_FOREIGN_Name SLIT("ForeignPtr") foreignPtrDataConKey
497 stablePtrTyConName = tcQual pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
498 stablePtrDataConName = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
499 deRefStablePtrName = varQual pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
500 newStablePtrName = varQual pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
502 errorName = varQual pREL_ERR_Name SLIT("error") errorIdKey
503 assertName = varQual pREL_GHC_Name SLIT("assert") assertIdKey
504 getTagName = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
505 runSTRepName = varQual pREL_ST_Name SLIT("runSTRep") runSTRepIdKey
508 %************************************************************************
510 \subsection{Known names}
512 %************************************************************************
514 The following names are known to the compiler, but they don't require
515 pre-assigned keys. Mostly these names are used in generating deriving
516 code, which is passed through the renamer anyway.
518 THEY ARE ALL ORIGINAL NAMES, HOWEVER
522 tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName
523 ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName
525 tupleCon_RDR = mkTupConRdrName dataName Boxed
526 tupleTyCon_RDR = mkTupConRdrName tcName Boxed
527 ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed
528 ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed
530 unitCon_RDR = dataQual_RDR pREL_BASE_Name SLIT("()")
531 unitTyCon_RDR = tcQual_RDR pREL_BASE_Name SLIT("()")
533 and_RDR = varQual_RDR pREL_BASE_Name SLIT("&&")
534 not_RDR = varQual_RDR pREL_BASE_Name SLIT("not")
535 compose_RDR = varQual_RDR pREL_BASE_Name SLIT(".")
536 ne_RDR = varQual_RDR pREL_BASE_Name SLIT("/=")
537 le_RDR = varQual_RDR pREL_BASE_Name SLIT("<=")
538 lt_RDR = varQual_RDR pREL_BASE_Name SLIT("<")
539 gt_RDR = varQual_RDR pREL_BASE_Name SLIT(">")
540 ltTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("LT")
541 eqTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("EQ")
542 gtTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("GT")
543 max_RDR = varQual_RDR pREL_BASE_Name SLIT("max")
544 min_RDR = varQual_RDR pREL_BASE_Name SLIT("min")
545 compare_RDR = varQual_RDR pREL_BASE_Name SLIT("compare")
546 showList_RDR = varQual_RDR pREL_SHOW_Name SLIT("showList")
547 showList___RDR = varQual_RDR pREL_SHOW_Name SLIT("showList__")
548 showsPrec_RDR = varQual_RDR pREL_SHOW_Name SLIT("showsPrec")
549 showSpace_RDR = varQual_RDR pREL_SHOW_Name SLIT("showSpace")
550 showString_RDR = varQual_RDR pREL_SHOW_Name SLIT("showString")
551 showParen_RDR = varQual_RDR pREL_SHOW_Name SLIT("showParen")
552 readsPrec_RDR = varQual_RDR pREL_READ_Name SLIT("readsPrec")
553 readList_RDR = varQual_RDR pREL_READ_Name SLIT("readList")
554 readParen_RDR = varQual_RDR pREL_READ_Name SLIT("readParen")
555 lex_RDR = varQual_RDR pREL_READ_Name SLIT("lex")
556 readList___RDR = varQual_RDR pREL_READ_Name SLIT("readList__")
557 times_RDR = varQual_RDR pREL_NUM_Name SLIT("*")
558 plus_RDR = varQual_RDR pREL_NUM_Name SLIT("+")
559 negate_RDR = varQual_RDR pREL_NUM_Name SLIT("negate")
560 range_RDR = varQual_RDR pREL_ARR_Name SLIT("range")
561 index_RDR = varQual_RDR pREL_ARR_Name SLIT("index")
562 inRange_RDR = varQual_RDR pREL_ARR_Name SLIT("inRange")
563 succ_RDR = varQual_RDR pREL_ENUM_Name SLIT("succ")
564 pred_RDR = varQual_RDR pREL_ENUM_Name SLIT("pred")
565 minBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("minBound")
566 maxBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("maxBound")
567 assertErr_RDR = varQual_RDR pREL_ERR_Name SLIT("assertError")
570 These RDR names also have known keys, so we need to get back the RDR names to
571 populate the occurrence list above.
574 funTyCon_RDR = nameRdrName funTyConName
575 nilCon_RDR = nameRdrName nilDataConName
576 listTyCon_RDR = nameRdrName listTyConName
577 ioTyCon_RDR = nameRdrName ioTyConName
578 intTyCon_RDR = nameRdrName intTyConName
579 eq_RDR = nameRdrName eqName
580 ge_RDR = nameRdrName geName
581 numClass_RDR = nameRdrName numClassName
582 ordClass_RDR = nameRdrName ordClassName
583 map_RDR = nameRdrName mapName
584 append_RDR = nameRdrName appendName
585 foldr_RDR = nameRdrName foldrName
586 build_RDR = nameRdrName buildName
587 enumFromTo_RDR = nameRdrName enumFromToName
588 returnM_RDR = nameRdrName returnMName
589 thenM_RDR = nameRdrName thenMName
590 failM_RDR = nameRdrName failMName
591 false_RDR = nameRdrName falseDataConName
592 true_RDR = nameRdrName trueDataConName
593 error_RDR = nameRdrName errorName
594 getTag_RDR = nameRdrName getTagName
595 fromEnum_RDR = nameRdrName fromEnumName
596 toEnum_RDR = nameRdrName toEnumName
597 enumFrom_RDR = nameRdrName enumFromName
598 mkInt_RDR = nameRdrName intDataConName
599 enumFromThen_RDR = nameRdrName enumFromThenName
600 enumFromThenTo_RDR = nameRdrName enumFromThenToName
601 ratioDataCon_RDR = nameRdrName ratioDataConName
602 plusInteger_RDR = nameRdrName plusIntegerName
603 timesInteger_RDR = nameRdrName timesIntegerName
604 enumClass_RDR = nameRdrName enumClassName
605 monadClass_RDR = nameRdrName monadClassName
606 ioDataCon_RDR = nameRdrName ioDataConName
607 cCallableClass_RDR = nameRdrName cCallableClassName
608 cReturnableClass_RDR = nameRdrName cReturnableClassName
609 eqClass_RDR = nameRdrName eqClassName
610 eqString_RDR = nameRdrName eqStringName
611 unpackCString_RDR = nameRdrName unpackCStringName
612 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
613 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
614 deRefStablePtr_RDR = nameRdrName deRefStablePtrName
615 newStablePtr_RDR = nameRdrName newStablePtrName
616 bindIO_RDR = nameRdrName bindIOName
617 returnIO_RDR = nameRdrName returnIOName
618 fromInteger_RDR = nameRdrName fromIntegerName
619 fromRational_RDR = nameRdrName fromRationalName
620 minus_RDR = nameRdrName minusName
623 %************************************************************************
625 \subsection{Local helpers}
627 %************************************************************************
629 All these are original names; hence mkOrig
632 varQual mod str uq = mkKnownKeyGlobal (varQual_RDR mod str) uq
633 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
634 tcQual mod str uq = mkKnownKeyGlobal (tcQual_RDR mod str) uq
635 clsQual mod str uq = mkKnownKeyGlobal (clsQual_RDR mod str) uq
637 kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
638 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
639 -- And they don't come from any particular module; indeed we always
640 -- want to print them unqualified. Hence the LocalName
642 varQual_RDR mod str = mkOrig varName mod str
643 tcQual_RDR mod str = mkOrig tcName mod str
644 clsQual_RDR mod str = mkOrig clsName mod str
645 dataQual_RDR mod str = mkOrig dataName mod str
648 %************************************************************************
650 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
652 %************************************************************************
655 boundedClassKey = mkPreludeClassUnique 1
656 enumClassKey = mkPreludeClassUnique 2
657 eqClassKey = mkPreludeClassUnique 3
658 floatingClassKey = mkPreludeClassUnique 5
659 fractionalClassKey = mkPreludeClassUnique 6
660 integralClassKey = mkPreludeClassUnique 7
661 monadClassKey = mkPreludeClassUnique 8
662 monadPlusClassKey = mkPreludeClassUnique 9
663 functorClassKey = mkPreludeClassUnique 10
664 numClassKey = mkPreludeClassUnique 11
665 ordClassKey = mkPreludeClassUnique 12
666 readClassKey = mkPreludeClassUnique 13
667 realClassKey = mkPreludeClassUnique 14
668 realFloatClassKey = mkPreludeClassUnique 15
669 realFracClassKey = mkPreludeClassUnique 16
670 showClassKey = mkPreludeClassUnique 17
672 cCallableClassKey = mkPreludeClassUnique 18
673 cReturnableClassKey = mkPreludeClassUnique 19
675 ixClassKey = mkPreludeClassUnique 20
678 %************************************************************************
680 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
682 %************************************************************************
685 addrPrimTyConKey = mkPreludeTyConUnique 1
686 addrTyConKey = mkPreludeTyConUnique 2
687 arrayPrimTyConKey = mkPreludeTyConUnique 3
688 boolTyConKey = mkPreludeTyConUnique 4
689 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
690 charPrimTyConKey = mkPreludeTyConUnique 7
691 charTyConKey = mkPreludeTyConUnique 8
692 doublePrimTyConKey = mkPreludeTyConUnique 9
693 doubleTyConKey = mkPreludeTyConUnique 10
694 floatPrimTyConKey = mkPreludeTyConUnique 11
695 floatTyConKey = mkPreludeTyConUnique 12
696 funTyConKey = mkPreludeTyConUnique 13
697 intPrimTyConKey = mkPreludeTyConUnique 14
698 intTyConKey = mkPreludeTyConUnique 15
699 int8TyConKey = mkPreludeTyConUnique 16
700 int16TyConKey = mkPreludeTyConUnique 17
701 int32TyConKey = mkPreludeTyConUnique 18
702 int64PrimTyConKey = mkPreludeTyConUnique 19
703 int64TyConKey = mkPreludeTyConUnique 20
704 integerTyConKey = mkPreludeTyConUnique 21
705 listTyConKey = mkPreludeTyConUnique 22
706 foreignObjPrimTyConKey = mkPreludeTyConUnique 23
707 foreignObjTyConKey = mkPreludeTyConUnique 24
708 foreignPtrTyConKey = mkPreludeTyConUnique 25
709 weakPrimTyConKey = mkPreludeTyConUnique 26
710 mutableArrayPrimTyConKey = mkPreludeTyConUnique 27
711 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 28
712 orderingTyConKey = mkPreludeTyConUnique 29
713 mVarPrimTyConKey = mkPreludeTyConUnique 30
714 ratioTyConKey = mkPreludeTyConUnique 31
715 rationalTyConKey = mkPreludeTyConUnique 32
716 realWorldTyConKey = mkPreludeTyConUnique 33
717 stablePtrPrimTyConKey = mkPreludeTyConUnique 34
718 stablePtrTyConKey = mkPreludeTyConUnique 35
719 statePrimTyConKey = mkPreludeTyConUnique 36
720 stableNamePrimTyConKey = mkPreludeTyConUnique 50
721 stableNameTyConKey = mkPreludeTyConUnique 51
722 mutableByteArrayTyConKey = mkPreludeTyConUnique 52
723 mutVarPrimTyConKey = mkPreludeTyConUnique 53
724 ioTyConKey = mkPreludeTyConUnique 55
725 byteArrayTyConKey = mkPreludeTyConUnique 56
726 wordPrimTyConKey = mkPreludeTyConUnique 57
727 wordTyConKey = mkPreludeTyConUnique 58
728 word8TyConKey = mkPreludeTyConUnique 59
729 word16TyConKey = mkPreludeTyConUnique 60
730 word32TyConKey = mkPreludeTyConUnique 61
731 word64PrimTyConKey = mkPreludeTyConUnique 62
732 word64TyConKey = mkPreludeTyConUnique 63
733 liftedConKey = mkPreludeTyConUnique 64
734 unliftedConKey = mkPreludeTyConUnique 65
735 anyBoxConKey = mkPreludeTyConUnique 66
736 kindConKey = mkPreludeTyConUnique 67
737 boxityConKey = mkPreludeTyConUnique 68
738 typeConKey = mkPreludeTyConUnique 69
739 threadIdPrimTyConKey = mkPreludeTyConUnique 70
740 bcoPrimTyConKey = mkPreludeTyConUnique 71
741 ptrTyConKey = mkPreludeTyConUnique 72
742 funPtrTyConKey = mkPreludeTyConUnique 73
744 -- Usage type constructors
745 usageConKey = mkPreludeTyConUnique 74
746 usOnceTyConKey = mkPreludeTyConUnique 75
747 usManyTyConKey = mkPreludeTyConUnique 76
749 -- Generic Type Constructors
750 crossTyConKey = mkPreludeTyConUnique 77
751 plusTyConKey = mkPreludeTyConUnique 78
752 genUnitTyConKey = mkPreludeTyConUnique 79
755 %************************************************************************
757 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
759 %************************************************************************
762 addrDataConKey = mkPreludeDataConUnique 0
763 charDataConKey = mkPreludeDataConUnique 1
764 consDataConKey = mkPreludeDataConUnique 2
765 doubleDataConKey = mkPreludeDataConUnique 3
766 falseDataConKey = mkPreludeDataConUnique 4
767 floatDataConKey = mkPreludeDataConUnique 5
768 intDataConKey = mkPreludeDataConUnique 6
769 smallIntegerDataConKey = mkPreludeDataConUnique 7
770 largeIntegerDataConKey = mkPreludeDataConUnique 8
771 foreignObjDataConKey = mkPreludeDataConUnique 9
772 foreignPtrDataConKey = mkPreludeDataConUnique 10
773 nilDataConKey = mkPreludeDataConUnique 11
774 ratioDataConKey = mkPreludeDataConUnique 12
775 stablePtrDataConKey = mkPreludeDataConUnique 13
776 stableNameDataConKey = mkPreludeDataConUnique 14
777 trueDataConKey = mkPreludeDataConUnique 15
778 wordDataConKey = mkPreludeDataConUnique 16
779 ioDataConKey = mkPreludeDataConUnique 17
780 ptrDataConKey = mkPreludeDataConUnique 18
781 funPtrDataConKey = mkPreludeDataConUnique 19
783 -- Generic data constructors
784 crossDataConKey = mkPreludeDataConUnique 20
785 inlDataConKey = mkPreludeDataConUnique 21
786 inrDataConKey = mkPreludeDataConUnique 22
787 genUnitDataConKey = mkPreludeDataConUnique 23
790 %************************************************************************
792 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
794 %************************************************************************
797 absentErrorIdKey = mkPreludeMiscIdUnique 1
798 appendIdKey = mkPreludeMiscIdUnique 2
799 augmentIdKey = mkPreludeMiscIdUnique 3
800 buildIdKey = mkPreludeMiscIdUnique 4
801 errorIdKey = mkPreludeMiscIdUnique 5
802 foldlIdKey = mkPreludeMiscIdUnique 6
803 foldrIdKey = mkPreludeMiscIdUnique 7
804 recSelErrIdKey = mkPreludeMiscIdUnique 8
805 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
806 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
807 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
808 integerZeroIdKey = mkPreludeMiscIdUnique 12
809 int2IntegerIdKey = mkPreludeMiscIdUnique 13
810 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
811 eqStringIdKey = mkPreludeMiscIdUnique 16
812 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
813 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
814 parErrorIdKey = mkPreludeMiscIdUnique 20
815 parIdKey = mkPreludeMiscIdUnique 21
816 patErrorIdKey = mkPreludeMiscIdUnique 22
817 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
818 recConErrorIdKey = mkPreludeMiscIdUnique 24
819 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
820 traceIdKey = mkPreludeMiscIdUnique 26
821 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
822 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
823 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
824 unpackCStringIdKey = mkPreludeMiscIdUnique 30
825 ushowListIdKey = mkPreludeMiscIdUnique 31
826 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
827 concatIdKey = mkPreludeMiscIdUnique 33
828 filterIdKey = mkPreludeMiscIdUnique 34
829 zipIdKey = mkPreludeMiscIdUnique 35
830 bindIOIdKey = mkPreludeMiscIdUnique 36
831 returnIOIdKey = mkPreludeMiscIdUnique 37
832 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
833 newStablePtrIdKey = mkPreludeMiscIdUnique 39
834 getTagIdKey = mkPreludeMiscIdUnique 40
835 plusIntegerIdKey = mkPreludeMiscIdUnique 41
836 timesIntegerIdKey = mkPreludeMiscIdUnique 42
837 printIdKey = mkPreludeMiscIdUnique 43
838 failIOIdKey = mkPreludeMiscIdUnique 44
841 Certain class operations from Prelude classes. They get their own
842 uniques so we can look them up easily when we want to conjure them up
843 during type checking.
846 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
847 minusClassOpKey = mkPreludeMiscIdUnique 103
848 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
849 enumFromClassOpKey = mkPreludeMiscIdUnique 105
850 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
851 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
852 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
853 eqClassOpKey = mkPreludeMiscIdUnique 109
854 geClassOpKey = mkPreludeMiscIdUnique 110
855 negateClassOpKey = mkPreludeMiscIdUnique 111
856 failMClassOpKey = mkPreludeMiscIdUnique 112
857 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
858 -- Just a place holder for unbound variables produced by the renamer:
859 unboundKey = mkPreludeMiscIdUnique 114
860 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
862 mainKey = mkPreludeMiscIdUnique 116
863 returnMClassOpKey = mkPreludeMiscIdUnique 117
864 otherwiseIdKey = mkPreludeMiscIdUnique 118
865 toEnumClassOpKey = mkPreludeMiscIdUnique 119
866 mapIdKey = mkPreludeMiscIdUnique 120
870 assertIdKey = mkPreludeMiscIdUnique 121
871 runSTRepIdKey = mkPreludeMiscIdUnique 122
875 %************************************************************************
877 \subsection{Standard groups of types}
879 %************************************************************************
891 -- Renamer always imports these data decls replete with constructors
892 -- so that desugarer can always see their constructors. Ugh!
897 , mutableByteArrayTyConKey
913 %************************************************************************
915 \subsection{Re-bindable desugaring names}
917 %************************************************************************
919 Haskell 98 says that when you say "3" you get the "fromInteger" from the
920 Standard Prelude, regardless of what is in scope. However, to experiment
921 with having a language that is less coupled to the standard prelude, we're
922 trying a non-standard extension that instead gives you whatever "Prelude.fromInteger"
923 happens to be in scope. Then you can
925 import MyPrelude as Prelude
926 to get the desired effect.
928 The SyntaxNames record gives all the names you can rebind in this way.
929 This record of names needs to go through the renamer to map RdrNames to
930 Names (i.e. look up the names in the in-scope environment), to suck in
931 their type signatures from interface file(s).
934 type SyntaxList = [(Name, RdrName)]
935 -- Maps a Name, which identifies the standard built-in thing
936 -- to a RdrName for the re-mapped version of the built-in thing
938 syntaxList :: SyntaxList
939 syntaxList =[ (fromIntegerName, mkUnqual varName SLIT("fromInteger"))
940 , (fromRationalName, mkUnqual varName SLIT("fromRational"))
941 , (negateName, mkUnqual varName SLIT("negate"))
942 , (minusName, mkUnqual varName SLIT("-"))
943 -- For now that's all. We may add booleans and lists later.
947 type SyntaxMap = Name -> Name
948 -- Maps a standard built-in name, such as PrelNum.fromInteger
949 -- to its re-mapped version, such as MyPrelude.fromInteger
951 vanillaSyntaxMap name = name
955 %************************************************************************
957 \subsection[Class-std-groups]{Standard groups of Prelude classes}
959 %************************************************************************
961 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
964 @derivingOccurrences@ maps a class name to a list of the (qualified)
965 occurrences that will be mentioned by the derived code for the class
966 when it is later generated. We don't need to put in things that are
967 WiredIn (because they are already mapped to their correct name by the
968 @NameSupply@. The class itself, and all its class ops, is already
969 flagged as an occurrence so we don't need to mention that either.
971 @derivingOccurrences@ has an item for every derivable class, even if
972 that item is empty, because we treat lookup failure as indicating that
973 the class is illegal in a deriving clause.
976 derivingOccurrences :: UniqFM [RdrName]
977 derivingOccurrences = listToUFM deriving_occ_info
979 derivableClassKeys = map fst deriving_occ_info
982 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
983 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
984 -- EQ (from Ordering) is needed to force in the constructors
985 -- as well as the type constructor.
986 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
987 -- The last two Enum deps are only used to produce better
988 -- error msgs for derived toEnum methods.
989 , (boundedClassKey, [intTyCon_RDR])
990 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
991 showParen_RDR, showSpace_RDR, showList___RDR])
992 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
993 foldr_RDR, build_RDR,
994 -- foldr and build required for list comprehension
996 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
997 -- returnM (and the rest of the Monad class decl)
998 -- will be forced in as result of depending
999 -- on thenM. -- SOF 1/99
1000 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
1001 foldr_RDR, build_RDR,
1002 -- foldr and build required for list comprehension used
1003 -- with single constructor types -- KSW 2000-06
1004 returnM_RDR, failM_RDR])
1005 -- the last two are needed to force returnM, thenM and failM
1006 -- in before typechecking the list(monad) comprehension
1007 -- generated for derived Ix instances (range method)
1008 -- of single constructor types. -- SOF 8/97
1010 -- intTyCon: Practically any deriving needs Int, either for index calculations,
1012 -- ordClass: really it's the methods that are actually used.
1013 -- numClass: for Int literals
1017 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1018 even though every numeric class has these two as a superclass,
1019 because the list of ambiguous dictionaries hasn't been simplified.
1027 ++ fractionalClassKeys
1029 fractionalClassKeys =
1030 [ fractionalClassKey
1036 -- the strictness analyser needs to know about numeric types
1037 -- (see SaAbsInt.lhs)
1038 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1044 , cReturnableClassKey
1048 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1050 -- We have to have "CCallable" and "CReturnable" in the standard
1051 -- classes, so that if you go...
1053 -- _ccall_ foo ... 93{-numeric literal-} ...
1055 -- ... it can do The Right Thing on the 93.
1057 noDictClassKeys -- These classes are used only for type annotations;
1058 -- they are not implemented by dictionaries, ever.