2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[PrelNames]{Definitions of prelude modules and names}
7 Nota Bene: all Names defined in here should come from the base package
9 * ModuleNames for prelude modules,
10 e.g. pREL_BASE_Name :: ModuleName
12 * Modules for prelude modules
13 e.g. pREL_Base :: Module
15 * Uniques for Ids, DataCons, TyCons and Classes that the compiler
16 "knows about" in some way
17 e.g. intTyConKey :: Unique
18 minusClassOpKey :: Unique
20 * Names for Ids, DataCons, TyCons and Classes that the compiler
21 "knows about" in some way
22 e.g. intTyConName :: Name
24 One of these Names contains
25 (a) the module and occurrence name of the thing
27 The may way the compiler "knows about" one of these things is
28 where the type checker or desugarer needs to look it up. For
29 example, when desugaring list comprehensions the desugarer
30 needs to conjure up 'foldr'. It does this by looking up
31 foldrName in the environment.
33 * RdrNames for Ids, DataCons etc that the compiler may emit into
34 generated code (e.g. for deriving). It's not necessary to know
35 the uniques for these guys, only their names
40 Unique, Uniquable(..), hasKey, -- Re-exported for convenience
42 -----------------------------------------------------------
43 module PrelNames, -- A huge bunch of (a) Names, e.g. intTyConName
44 -- (b) Uniques e.g. intTyConKey
45 -- (c) Groups of classes and types
46 -- (d) miscellaneous things
47 -- So many that we export them all
50 #include "HsVersions.h"
53 import Module ( Module, ModuleName, mkModule, mkModuleNameFS )
54 import OccName ( dataName, tcName, clsName, varName, mkOccNameFS,
56 import RdrName ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
57 import Unique ( Unique, Uniquable(..), hasKey,
58 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
59 mkPreludeTyConUnique, mkPreludeClassUnique,
62 import BasicTypes ( Boxity(..), Arity )
63 import Name ( Name, mkInternalName, mkExternalName )
64 import SrcLoc ( noSrcLoc )
69 %************************************************************************
71 \subsection{Local Names}
73 %************************************************************************
75 This *local* name is used by the interactive stuff
78 itName uniq = mkInternalName uniq (mkOccNameFS varName FSLIT("it")) noSrcLoc
82 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
83 -- during compiler debugging.
84 mkUnboundName :: RdrName -> Name
85 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
87 isUnboundName :: Name -> Bool
88 isUnboundName name = name `hasKey` unboundKey
92 %************************************************************************
94 \subsection{Known key Names}
96 %************************************************************************
98 This section tells what the compiler knows about the assocation of
99 names with uniques. These ones are the *non* wired-in ones. The
100 wired in ones are defined in TysWiredIn etc.
103 basicKnownKeyNames :: [Name]
106 ++ typeableClassNames
107 ++ [ -- Type constructors (synonyms especially)
108 ioTyConName, ioDataConName,
114 integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
116 -- Classes. *Must* include:
117 -- classes that are grabbed by key (e.g., eqClassKey)
118 -- classes in "Class.standardClassKeys" (quite a few)
119 eqClassName, -- mentioned, derivable
120 ordClassName, -- derivable
121 boundedClassName, -- derivable
122 numClassName, -- mentioned, numeric
123 enumClassName, -- derivable
126 realClassName, -- numeric
127 integralClassName, -- numeric
128 fractionalClassName, -- numeric
129 floatingClassName, -- numeric
130 realFracClassName, -- numeric
131 realFloatClassName, -- numeric
135 negateName, minusName,
136 fromRationalName, fromIntegerName,
140 enumFromName, enumFromThenName,
141 enumFromThenToName, enumFromToName,
142 enumFromToPName, enumFromThenToPName,
145 thenIOName, bindIOName, returnIOName, failIOName,
146 failMName, bindMName, thenMName, returnMName,
152 arrAName, composeAName, firstAName,
153 appAName, choiceAName, loopAName,
168 unpackCStringName, unpackCStringAppendName,
169 unpackCStringFoldrName, unpackCStringUtf8Name,
172 concatName, filterName,
173 zipName, foldrName, buildName, augmentName, appendName,
175 -- Parallel array operations
176 nullPName, lengthPName, replicatePName, mapPName,
177 filterPName, zipPName, crossPName, indexPName,
178 toPName, bpermutePName, bpermuteDftPName, indexOfPName,
180 -- FFI primitive types that are not wired-in.
181 stablePtrTyConName, ptrTyConName, funPtrTyConName,
182 int8TyConName, int16TyConName, int32TyConName, int64TyConName,
183 wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
187 plusIntegerName, timesIntegerName,
188 eqStringName, assertName, breakpointName, breakpointCondName,
189 breakpointAutoName, opaqueTyConName,
190 assertErrorName, runSTRepName,
191 printName, fstName, sndName,
194 monadFixClassName, mfixName,
197 randomClassName, randomGenClassName, monadPlusClassName,
203 , eitherTyConName, leftDataConName, rightDataConName
206 , objectTyConName, marshalObjectName, unmarshalObjectName
207 , marshalStringName, unmarshalStringName, checkDotnetResName
210 genericTyConNames :: [Name]
211 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
215 %************************************************************************
217 \subsection{Module names}
219 %************************************************************************
222 --MetaHaskell Extension Add a new module here
224 pRELUDE = mkBaseModule_ pRELUDE_NAME
225 gHC_PRIM = mkBaseModule FSLIT("GHC.Prim") -- Primitive types and values
226 gHC_BASE = mkBaseModule FSLIT("GHC.Base")
227 gHC_ENUM = mkBaseModule FSLIT("GHC.Enum")
228 gHC_SHOW = mkBaseModule FSLIT("GHC.Show")
229 gHC_READ = mkBaseModule FSLIT("GHC.Read")
230 gHC_NUM = mkBaseModule FSLIT("GHC.Num")
231 gHC_LIST = mkBaseModule FSLIT("GHC.List")
232 gHC_PARR = mkBaseModule FSLIT("GHC.PArr")
233 dATA_TUP = mkBaseModule FSLIT("Data.Tuple")
234 dATA_EITHER = mkBaseModule FSLIT("Data.Either")
235 gHC_PACK = mkBaseModule FSLIT("GHC.Pack")
236 gHC_CONC = mkBaseModule FSLIT("GHC.Conc")
237 gHC_IO_BASE = mkBaseModule FSLIT("GHC.IOBase")
238 gHC_ST = mkBaseModule FSLIT("GHC.ST")
239 gHC_ARR = mkBaseModule FSLIT("GHC.Arr")
240 gHC_STABLE = mkBaseModule FSLIT("GHC.Stable")
241 gHC_ADDR = mkBaseModule FSLIT("GHC.Addr")
242 gHC_PTR = mkBaseModule FSLIT("GHC.Ptr")
243 gHC_ERR = mkBaseModule FSLIT("GHC.Err")
244 gHC_REAL = mkBaseModule FSLIT("GHC.Real")
245 gHC_FLOAT = mkBaseModule FSLIT("GHC.Float")
246 gHC_TOP_HANDLER = mkBaseModule FSLIT("GHC.TopHandler")
247 sYSTEM_IO = mkBaseModule FSLIT("System.IO")
248 dYNAMIC = mkBaseModule FSLIT("Data.Dynamic")
249 tYPEABLE = mkBaseModule FSLIT("Data.Typeable")
250 gENERICS = mkBaseModule FSLIT("Data.Generics.Basics")
251 dOTNET = mkBaseModule FSLIT("GHC.Dotnet")
252 rEAD_PREC = mkBaseModule FSLIT("Text.ParserCombinators.ReadPrec")
253 lEX = mkBaseModule FSLIT("Text.Read.Lex")
254 gHC_INT = mkBaseModule FSLIT("GHC.Int")
255 gHC_WORD = mkBaseModule FSLIT("GHC.Word")
256 mONAD = mkBaseModule FSLIT("Control.Monad")
257 mONAD_FIX = mkBaseModule FSLIT("Control.Monad.Fix")
258 aRROW = mkBaseModule FSLIT("Control.Arrow")
259 rANDOM = mkBaseModule FSLIT("System.Random")
260 gLA_EXTS = mkBaseModule FSLIT("GHC.Exts")
262 mAIN = mkMainModule_ mAIN_NAME
263 rOOT_MAIN = mkMainModule FSLIT(":Main") -- Root module for initialisation
265 -- The ':xxx' makes a module name that the user can never
266 -- use himself. The z-encoding for ':' is "ZC", so the z-encoded
267 -- module name still starts with a capital letter, which keeps
268 -- the z-encoded version consistent.
269 iNTERACTIVE = mkMainModule FSLIT(":Interactive")
270 thFAKE = mkMainModule FSLIT(":THFake")
272 pRELUDE_NAME = mkModuleNameFS FSLIT("Prelude")
273 mAIN_NAME = mkModuleNameFS FSLIT("Main")
275 mkBaseModule :: FastString -> Module
276 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
278 mkBaseModule_ :: ModuleName -> Module
279 mkBaseModule_ m = mkModule basePackageId m
281 mkMainModule :: FastString -> Module
282 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
284 mkMainModule_ :: ModuleName -> Module
285 mkMainModule_ m = mkModule mainPackageId m
288 %************************************************************************
290 \subsection{Constructing the names of tuples
292 %************************************************************************
295 mkTupleModule :: Boxity -> Arity -> Module
296 mkTupleModule Boxed 0 = gHC_BASE
297 mkTupleModule Boxed _ = dATA_TUP
298 mkTupleModule Unboxed _ = gHC_PRIM
302 %************************************************************************
306 %************************************************************************
309 main_RDR_Unqual = mkUnqual varName FSLIT("main")
310 -- We definitely don't want an Orig RdrName, because
311 -- main might, in principle, be imported into module Main
313 eq_RDR = nameRdrName eqName
314 ge_RDR = nameRdrName geName
315 ne_RDR = varQual_RDR gHC_BASE FSLIT("/=")
316 le_RDR = varQual_RDR gHC_BASE FSLIT("<=")
317 gt_RDR = varQual_RDR gHC_BASE FSLIT(">")
318 compare_RDR = varQual_RDR gHC_BASE FSLIT("compare")
319 ltTag_RDR = dataQual_RDR gHC_BASE FSLIT("LT")
320 eqTag_RDR = dataQual_RDR gHC_BASE FSLIT("EQ")
321 gtTag_RDR = dataQual_RDR gHC_BASE FSLIT("GT")
323 eqClass_RDR = nameRdrName eqClassName
324 numClass_RDR = nameRdrName numClassName
325 ordClass_RDR = nameRdrName ordClassName
326 enumClass_RDR = nameRdrName enumClassName
327 monadClass_RDR = nameRdrName monadClassName
329 map_RDR = varQual_RDR gHC_BASE FSLIT("map")
330 append_RDR = varQual_RDR gHC_BASE FSLIT("++")
332 foldr_RDR = nameRdrName foldrName
333 build_RDR = nameRdrName buildName
334 returnM_RDR = nameRdrName returnMName
335 bindM_RDR = nameRdrName bindMName
336 failM_RDR = nameRdrName failMName
338 and_RDR = nameRdrName andName
340 left_RDR = nameRdrName leftDataConName
341 right_RDR = nameRdrName rightDataConName
343 fromEnum_RDR = varQual_RDR gHC_ENUM FSLIT("fromEnum")
344 toEnum_RDR = varQual_RDR gHC_ENUM FSLIT("toEnum")
346 enumFrom_RDR = nameRdrName enumFromName
347 enumFromTo_RDR = nameRdrName enumFromToName
348 enumFromThen_RDR = nameRdrName enumFromThenName
349 enumFromThenTo_RDR = nameRdrName enumFromThenToName
351 ratioDataCon_RDR = nameRdrName ratioDataConName
352 plusInteger_RDR = nameRdrName plusIntegerName
353 timesInteger_RDR = nameRdrName timesIntegerName
355 ioDataCon_RDR = nameRdrName ioDataConName
357 eqString_RDR = nameRdrName eqStringName
358 unpackCString_RDR = nameRdrName unpackCStringName
359 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
360 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
362 newStablePtr_RDR = nameRdrName newStablePtrName
363 wordDataCon_RDR = dataQual_RDR gHC_WORD FSLIT("W#")
365 bindIO_RDR = nameRdrName bindIOName
366 returnIO_RDR = nameRdrName returnIOName
368 fromInteger_RDR = nameRdrName fromIntegerName
369 fromRational_RDR = nameRdrName fromRationalName
370 minus_RDR = nameRdrName minusName
371 times_RDR = varQual_RDR gHC_NUM FSLIT("*")
372 plus_RDR = varQual_RDR gHC_NUM FSLIT("+")
374 compose_RDR = varQual_RDR gHC_BASE FSLIT(".")
376 not_RDR = varQual_RDR gHC_BASE FSLIT("not")
377 getTag_RDR = varQual_RDR gHC_BASE FSLIT("getTag")
378 succ_RDR = varQual_RDR gHC_ENUM FSLIT("succ")
379 pred_RDR = varQual_RDR gHC_ENUM FSLIT("pred")
380 minBound_RDR = varQual_RDR gHC_ENUM FSLIT("minBound")
381 maxBound_RDR = varQual_RDR gHC_ENUM FSLIT("maxBound")
382 range_RDR = varQual_RDR gHC_ARR FSLIT("range")
383 inRange_RDR = varQual_RDR gHC_ARR FSLIT("inRange")
384 index_RDR = varQual_RDR gHC_ARR FSLIT("index")
385 unsafeIndex_RDR = varQual_RDR gHC_ARR FSLIT("unsafeIndex")
386 unsafeRangeSize_RDR = varQual_RDR gHC_ARR FSLIT("unsafeRangeSize")
388 readList_RDR = varQual_RDR gHC_READ FSLIT("readList")
389 readListDefault_RDR = varQual_RDR gHC_READ FSLIT("readListDefault")
390 readListPrec_RDR = varQual_RDR gHC_READ FSLIT("readListPrec")
391 readListPrecDefault_RDR = varQual_RDR gHC_READ FSLIT("readListPrecDefault")
392 readPrec_RDR = varQual_RDR gHC_READ FSLIT("readPrec")
393 parens_RDR = varQual_RDR gHC_READ FSLIT("parens")
394 choose_RDR = varQual_RDR gHC_READ FSLIT("choose")
395 lexP_RDR = varQual_RDR gHC_READ FSLIT("lexP")
397 punc_RDR = dataQual_RDR lEX FSLIT("Punc")
398 ident_RDR = dataQual_RDR lEX FSLIT("Ident")
399 symbol_RDR = dataQual_RDR lEX FSLIT("Symbol")
401 step_RDR = varQual_RDR rEAD_PREC FSLIT("step")
402 alt_RDR = varQual_RDR rEAD_PREC FSLIT("+++")
403 reset_RDR = varQual_RDR rEAD_PREC FSLIT("reset")
404 prec_RDR = varQual_RDR rEAD_PREC FSLIT("prec")
406 showList_RDR = varQual_RDR gHC_SHOW FSLIT("showList")
407 showList___RDR = varQual_RDR gHC_SHOW FSLIT("showList__")
408 showsPrec_RDR = varQual_RDR gHC_SHOW FSLIT("showsPrec")
409 showString_RDR = varQual_RDR gHC_SHOW FSLIT("showString")
410 showSpace_RDR = varQual_RDR gHC_SHOW FSLIT("showSpace")
411 showParen_RDR = varQual_RDR gHC_SHOW FSLIT("showParen")
413 typeOf_RDR = varQual_RDR tYPEABLE FSLIT("typeOf")
414 mkTypeRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyConApp")
415 mkTyConRep_RDR = varQual_RDR tYPEABLE FSLIT("mkTyCon")
417 undefined_RDR = varQual_RDR gHC_ERR FSLIT("undefined")
419 crossDataCon_RDR = dataQual_RDR gHC_BASE FSLIT(":*:")
420 inlDataCon_RDR = dataQual_RDR gHC_BASE FSLIT("Inl")
421 inrDataCon_RDR = dataQual_RDR gHC_BASE FSLIT("Inr")
422 genUnitDataCon_RDR = dataQual_RDR gHC_BASE FSLIT("Unit")
424 ----------------------
425 varQual_RDR mod str = mkOrig mod (mkOccNameFS varName str)
426 tcQual_RDR mod str = mkOrig mod (mkOccNameFS tcName str)
427 clsQual_RDR mod str = mkOrig mod (mkOccNameFS clsName str)
428 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
431 %************************************************************************
433 \subsection{Known-key names}
435 %************************************************************************
437 Many of these Names are not really "built in", but some parts of the
438 compiler (notably the deriving mechanism) need to mention their names,
439 and it's convenient to write them all down in one place.
441 --MetaHaskell Extension add the constrs and the lower case case
442 -- guys as well (perhaps) e.g. see trueDataConName below
446 runMainIOName = varQual gHC_TOP_HANDLER FSLIT("runMainIO") runMainKey
448 orderingTyConName = tcQual gHC_BASE FSLIT("Ordering") orderingTyConKey
450 eitherTyConName = tcQual dATA_EITHER FSLIT("Either") eitherTyConKey
451 leftDataConName = conName dATA_EITHER FSLIT("Left") leftDataConKey
452 rightDataConName = conName dATA_EITHER FSLIT("Right") rightDataConKey
455 crossTyConName = tcQual gHC_BASE FSLIT(":*:") crossTyConKey
456 plusTyConName = tcQual gHC_BASE FSLIT(":+:") plusTyConKey
457 genUnitTyConName = tcQual gHC_BASE FSLIT("Unit") genUnitTyConKey
459 -- Base strings Strings
460 unpackCStringName = varQual gHC_BASE FSLIT("unpackCString#") unpackCStringIdKey
461 unpackCStringAppendName = varQual gHC_BASE FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
462 unpackCStringFoldrName = varQual gHC_BASE FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
463 unpackCStringUtf8Name = varQual gHC_BASE FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
464 eqStringName = varQual gHC_BASE FSLIT("eqString") eqStringIdKey
466 -- The 'inline' function
467 inlineIdName = varQual gHC_BASE FSLIT("inline") inlineIdKey
469 -- Base classes (Eq, Ord, Functor)
470 eqClassName = clsQual gHC_BASE FSLIT("Eq") eqClassKey
471 eqName = methName gHC_BASE FSLIT("==") eqClassOpKey
472 ordClassName = clsQual gHC_BASE FSLIT("Ord") ordClassKey
473 geName = methName gHC_BASE FSLIT(">=") geClassOpKey
474 functorClassName = clsQual gHC_BASE FSLIT("Functor") functorClassKey
477 monadClassName = clsQual gHC_BASE FSLIT("Monad") monadClassKey
478 thenMName = methName gHC_BASE FSLIT(">>") thenMClassOpKey
479 bindMName = methName gHC_BASE FSLIT(">>=") bindMClassOpKey
480 returnMName = methName gHC_BASE FSLIT("return") returnMClassOpKey
481 failMName = methName gHC_BASE FSLIT("fail") failMClassOpKey
483 -- Random PrelBase functions
484 otherwiseIdName = varQual gHC_BASE FSLIT("otherwise") otherwiseIdKey
485 foldrName = varQual gHC_BASE FSLIT("foldr") foldrIdKey
486 buildName = varQual gHC_BASE FSLIT("build") buildIdKey
487 augmentName = varQual gHC_BASE FSLIT("augment") augmentIdKey
488 appendName = varQual gHC_BASE FSLIT("++") appendIdKey
489 andName = varQual gHC_BASE FSLIT("&&") andIdKey
490 orName = varQual gHC_BASE FSLIT("||") orIdKey
491 assertName = varQual gHC_BASE FSLIT("assert") assertIdKey
492 breakpointName = varQual gHC_BASE FSLIT("breakpoint") breakpointIdKey
493 breakpointCondName= varQual gHC_BASE FSLIT("breakpointCond") breakpointCondIdKey
494 breakpointAutoName= varQual gHC_BASE FSLIT("breakpointAuto") breakpointAutoIdKey
495 opaqueTyConName = tcQual gHC_BASE FSLIT("Opaque") opaqueTyConKey
500 (mkOccNameFS varName FSLIT("breakpointJump"))
502 breakpointCondJumpName
504 breakpointCondJumpIdKey
505 (mkOccNameFS varName FSLIT("breakpointCondJump"))
507 breakpointAutoJumpName
509 breakpointAutoJumpIdKey
510 (mkOccNameFS varName FSLIT("breakpointAutoJump"))
514 fstName = varQual dATA_TUP FSLIT("fst") fstIdKey
515 sndName = varQual dATA_TUP FSLIT("snd") sndIdKey
518 numClassName = clsQual gHC_NUM FSLIT("Num") numClassKey
519 fromIntegerName = methName gHC_NUM FSLIT("fromInteger") fromIntegerClassOpKey
520 minusName = methName gHC_NUM FSLIT("-") minusClassOpKey
521 negateName = methName gHC_NUM FSLIT("negate") negateClassOpKey
522 plusIntegerName = varQual gHC_NUM FSLIT("plusInteger") plusIntegerIdKey
523 timesIntegerName = varQual gHC_NUM FSLIT("timesInteger") timesIntegerIdKey
524 integerTyConName = tcQual gHC_NUM FSLIT("Integer") integerTyConKey
525 smallIntegerDataConName = conName gHC_NUM FSLIT("S#") smallIntegerDataConKey
526 largeIntegerDataConName = conName gHC_NUM FSLIT("J#") largeIntegerDataConKey
528 -- PrelReal types and classes
529 rationalTyConName = tcQual gHC_REAL FSLIT("Rational") rationalTyConKey
530 ratioTyConName = tcQual gHC_REAL FSLIT("Ratio") ratioTyConKey
531 ratioDataConName = conName gHC_REAL FSLIT(":%") ratioDataConKey
532 realClassName = clsQual gHC_REAL FSLIT("Real") realClassKey
533 integralClassName = clsQual gHC_REAL FSLIT("Integral") integralClassKey
534 realFracClassName = clsQual gHC_REAL FSLIT("RealFrac") realFracClassKey
535 fractionalClassName = clsQual gHC_REAL FSLIT("Fractional") fractionalClassKey
536 fromRationalName = methName gHC_REAL FSLIT("fromRational") fromRationalClassOpKey
539 floatingClassName = clsQual gHC_FLOAT FSLIT("Floating") floatingClassKey
540 realFloatClassName = clsQual gHC_FLOAT FSLIT("RealFloat") realFloatClassKey
543 ixClassName = clsQual gHC_ARR FSLIT("Ix") ixClassKey
546 typeableClassName = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
547 typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey
548 typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey
549 typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey
550 typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey
551 typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey
552 typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey
553 typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey
555 typeableClassNames = [ typeableClassName, typeable1ClassName, typeable2ClassName
556 , typeable3ClassName, typeable4ClassName, typeable5ClassName
557 , typeable6ClassName, typeable7ClassName ]
560 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
563 assertErrorName = varQual gHC_ERR FSLIT("assertError") assertErrorIdKey
565 -- Enum module (Enum, Bounded)
566 enumClassName = clsQual gHC_ENUM FSLIT("Enum") enumClassKey
567 enumFromName = methName gHC_ENUM FSLIT("enumFrom") enumFromClassOpKey
568 enumFromToName = methName gHC_ENUM FSLIT("enumFromTo") enumFromToClassOpKey
569 enumFromThenName = methName gHC_ENUM FSLIT("enumFromThen") enumFromThenClassOpKey
570 enumFromThenToName = methName gHC_ENUM FSLIT("enumFromThenTo") enumFromThenToClassOpKey
571 boundedClassName = clsQual gHC_ENUM FSLIT("Bounded") boundedClassKey
574 concatName = varQual gHC_LIST FSLIT("concat") concatIdKey
575 filterName = varQual gHC_LIST FSLIT("filter") filterIdKey
576 zipName = varQual gHC_LIST FSLIT("zip") zipIdKey
579 showClassName = clsQual gHC_SHOW FSLIT("Show") showClassKey
582 readClassName = clsQual gHC_READ FSLIT("Read") readClassKey
584 -- parallel array types and functions
585 enumFromToPName = varQual gHC_PARR FSLIT("enumFromToP") enumFromToPIdKey
586 enumFromThenToPName= varQual gHC_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
587 nullPName = varQual gHC_PARR FSLIT("nullP") nullPIdKey
588 lengthPName = varQual gHC_PARR FSLIT("lengthP") lengthPIdKey
589 replicatePName = varQual gHC_PARR FSLIT("replicateP") replicatePIdKey
590 mapPName = varQual gHC_PARR FSLIT("mapP") mapPIdKey
591 filterPName = varQual gHC_PARR FSLIT("filterP") filterPIdKey
592 zipPName = varQual gHC_PARR FSLIT("zipP") zipPIdKey
593 crossPName = varQual gHC_PARR FSLIT("crossP") crossPIdKey
594 indexPName = varQual gHC_PARR FSLIT("!:") indexPIdKey
595 toPName = varQual gHC_PARR FSLIT("toP") toPIdKey
596 bpermutePName = varQual gHC_PARR FSLIT("bpermuteP") bpermutePIdKey
597 bpermuteDftPName = varQual gHC_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
598 indexOfPName = varQual gHC_PARR FSLIT("indexOfP") indexOfPIdKey
601 ioTyConName = tcQual gHC_IO_BASE FSLIT("IO") ioTyConKey
602 ioDataConName = conName gHC_IO_BASE FSLIT("IO") ioDataConKey
603 thenIOName = varQual gHC_IO_BASE FSLIT("thenIO") thenIOIdKey
604 bindIOName = varQual gHC_IO_BASE FSLIT("bindIO") bindIOIdKey
605 returnIOName = varQual gHC_IO_BASE FSLIT("returnIO") returnIOIdKey
606 failIOName = varQual gHC_IO_BASE FSLIT("failIO") failIOIdKey
609 printName = varQual sYSTEM_IO FSLIT("print") printIdKey
611 -- Int, Word, and Addr things
612 int8TyConName = tcQual gHC_INT FSLIT("Int8") int8TyConKey
613 int16TyConName = tcQual gHC_INT FSLIT("Int16") int16TyConKey
614 int32TyConName = tcQual gHC_INT FSLIT("Int32") int32TyConKey
615 int64TyConName = tcQual gHC_INT FSLIT("Int64") int64TyConKey
618 word8TyConName = tcQual gHC_WORD FSLIT("Word8") word8TyConKey
619 word16TyConName = tcQual gHC_WORD FSLIT("Word16") word16TyConKey
620 word32TyConName = tcQual gHC_WORD FSLIT("Word32") word32TyConKey
621 word64TyConName = tcQual gHC_WORD FSLIT("Word64") word64TyConKey
622 wordTyConName = tcQual gHC_WORD FSLIT("Word") wordTyConKey
623 wordDataConName = conName gHC_WORD FSLIT("W#") wordDataConKey
626 ptrTyConName = tcQual gHC_PTR FSLIT("Ptr") ptrTyConKey
627 funPtrTyConName = tcQual gHC_PTR FSLIT("FunPtr") funPtrTyConKey
629 -- Foreign objects and weak pointers
630 stablePtrTyConName = tcQual gHC_STABLE FSLIT("StablePtr") stablePtrTyConKey
631 newStablePtrName = varQual gHC_STABLE FSLIT("newStablePtr") newStablePtrIdKey
634 runSTRepName = varQual gHC_ST FSLIT("runSTRep") runSTRepIdKey
636 -- Recursive-do notation
637 monadFixClassName = clsQual mONAD_FIX FSLIT("MonadFix") monadFixClassKey
638 mfixName = methName mONAD_FIX FSLIT("mfix") mfixIdKey
641 arrAName = varQual aRROW FSLIT("arr") arrAIdKey
642 composeAName = varQual aRROW FSLIT(">>>") composeAIdKey
643 firstAName = varQual aRROW FSLIT("first") firstAIdKey
644 appAName = varQual aRROW FSLIT("app") appAIdKey
645 choiceAName = varQual aRROW FSLIT("|||") choiceAIdKey
646 loopAName = varQual aRROW FSLIT("loop") loopAIdKey
648 -- Other classes, needed for type defaulting
649 monadPlusClassName = clsQual mONAD FSLIT("MonadPlus") monadPlusClassKey
650 randomClassName = clsQual rANDOM FSLIT("Random") randomClassKey
651 randomGenClassName = clsQual rANDOM FSLIT("RandomGen") randomGenClassKey
654 objectTyConName = tcQual dOTNET FSLIT("Object") objectTyConKey
655 -- objectTyConName was "wTcQual", but that's gone now, and
656 -- I can't see why it was wired in anyway...
657 unmarshalObjectName = varQual dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
658 marshalObjectName = varQual dOTNET FSLIT("marshalObject") marshalObjectIdKey
659 marshalStringName = varQual dOTNET FSLIT("marshalString") marshalStringIdKey
660 unmarshalStringName = varQual dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
661 checkDotnetResName = varQual dOTNET FSLIT("checkResult") checkDotnetResNameIdKey
664 %************************************************************************
666 \subsection{Local helpers}
668 %************************************************************************
670 All these are original names; hence mkOrig
673 varQual = mk_known_key_name varName
674 tcQual = mk_known_key_name tcName
675 clsQual = mk_known_key_name clsName
677 mk_known_key_name space mod str uniq
678 = mkExternalName uniq mod (mkOccNameFS space str) noSrcLoc
680 conName :: Module -> FastString -> Unique -> Name
682 = mkExternalName uniq mod (mkOccNameFS dataName occ) noSrcLoc
684 methName :: Module -> FastString -> Unique -> Name
685 methName mod occ uniq
686 = mkExternalName uniq mod (mkVarOccFS occ) noSrcLoc
689 %************************************************************************
691 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
693 %************************************************************************
694 --MetaHaskell extension hand allocate keys here
697 boundedClassKey = mkPreludeClassUnique 1
698 enumClassKey = mkPreludeClassUnique 2
699 eqClassKey = mkPreludeClassUnique 3
700 floatingClassKey = mkPreludeClassUnique 5
701 fractionalClassKey = mkPreludeClassUnique 6
702 integralClassKey = mkPreludeClassUnique 7
703 monadClassKey = mkPreludeClassUnique 8
704 dataClassKey = mkPreludeClassUnique 9
705 functorClassKey = mkPreludeClassUnique 10
706 numClassKey = mkPreludeClassUnique 11
707 ordClassKey = mkPreludeClassUnique 12
708 readClassKey = mkPreludeClassUnique 13
709 realClassKey = mkPreludeClassUnique 14
710 realFloatClassKey = mkPreludeClassUnique 15
711 realFracClassKey = mkPreludeClassUnique 16
712 showClassKey = mkPreludeClassUnique 17
713 ixClassKey = mkPreludeClassUnique 18
715 typeableClassKey = mkPreludeClassUnique 20
716 typeable1ClassKey = mkPreludeClassUnique 21
717 typeable2ClassKey = mkPreludeClassUnique 22
718 typeable3ClassKey = mkPreludeClassUnique 23
719 typeable4ClassKey = mkPreludeClassUnique 24
720 typeable5ClassKey = mkPreludeClassUnique 25
721 typeable6ClassKey = mkPreludeClassUnique 26
722 typeable7ClassKey = mkPreludeClassUnique 27
724 monadFixClassKey = mkPreludeClassUnique 28
726 monadPlusClassKey = mkPreludeClassUnique 30
727 randomClassKey = mkPreludeClassUnique 31
728 randomGenClassKey = mkPreludeClassUnique 32
731 %************************************************************************
733 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
735 %************************************************************************
738 addrPrimTyConKey = mkPreludeTyConUnique 1
739 arrayPrimTyConKey = mkPreludeTyConUnique 3
740 boolTyConKey = mkPreludeTyConUnique 4
741 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
742 charPrimTyConKey = mkPreludeTyConUnique 7
743 charTyConKey = mkPreludeTyConUnique 8
744 doublePrimTyConKey = mkPreludeTyConUnique 9
745 doubleTyConKey = mkPreludeTyConUnique 10
746 floatPrimTyConKey = mkPreludeTyConUnique 11
747 floatTyConKey = mkPreludeTyConUnique 12
748 funTyConKey = mkPreludeTyConUnique 13
749 intPrimTyConKey = mkPreludeTyConUnique 14
750 intTyConKey = mkPreludeTyConUnique 15
751 int8TyConKey = mkPreludeTyConUnique 16
752 int16TyConKey = mkPreludeTyConUnique 17
753 int32PrimTyConKey = mkPreludeTyConUnique 18
754 int32TyConKey = mkPreludeTyConUnique 19
755 int64PrimTyConKey = mkPreludeTyConUnique 20
756 int64TyConKey = mkPreludeTyConUnique 21
757 integerTyConKey = mkPreludeTyConUnique 22
758 listTyConKey = mkPreludeTyConUnique 23
759 foreignObjPrimTyConKey = mkPreludeTyConUnique 24
760 weakPrimTyConKey = mkPreludeTyConUnique 27
761 mutableArrayPrimTyConKey = mkPreludeTyConUnique 28
762 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 29
763 orderingTyConKey = mkPreludeTyConUnique 30
764 mVarPrimTyConKey = mkPreludeTyConUnique 31
765 ratioTyConKey = mkPreludeTyConUnique 32
766 rationalTyConKey = mkPreludeTyConUnique 33
767 realWorldTyConKey = mkPreludeTyConUnique 34
768 stablePtrPrimTyConKey = mkPreludeTyConUnique 35
769 stablePtrTyConKey = mkPreludeTyConUnique 36
771 anyPrimTyConKey = mkPreludeTyConUnique 37
772 anyPrimTyCon1Key = mkPreludeTyConUnique 38
774 statePrimTyConKey = mkPreludeTyConUnique 50
775 stableNamePrimTyConKey = mkPreludeTyConUnique 51
776 stableNameTyConKey = mkPreludeTyConUnique 52
777 mutVarPrimTyConKey = mkPreludeTyConUnique 55
778 ioTyConKey = mkPreludeTyConUnique 56
779 wordPrimTyConKey = mkPreludeTyConUnique 58
780 wordTyConKey = mkPreludeTyConUnique 59
781 word8TyConKey = mkPreludeTyConUnique 60
782 word16TyConKey = mkPreludeTyConUnique 61
783 word32PrimTyConKey = mkPreludeTyConUnique 62
784 word32TyConKey = mkPreludeTyConUnique 63
785 word64PrimTyConKey = mkPreludeTyConUnique 64
786 word64TyConKey = mkPreludeTyConUnique 65
787 liftedConKey = mkPreludeTyConUnique 66
788 unliftedConKey = mkPreludeTyConUnique 67
789 anyBoxConKey = mkPreludeTyConUnique 68
790 kindConKey = mkPreludeTyConUnique 69
791 boxityConKey = mkPreludeTyConUnique 70
792 typeConKey = mkPreludeTyConUnique 71
793 threadIdPrimTyConKey = mkPreludeTyConUnique 72
794 bcoPrimTyConKey = mkPreludeTyConUnique 73
795 ptrTyConKey = mkPreludeTyConUnique 74
796 funPtrTyConKey = mkPreludeTyConUnique 75
797 tVarPrimTyConKey = mkPreludeTyConUnique 76
799 -- Generic Type Constructors
800 crossTyConKey = mkPreludeTyConUnique 79
801 plusTyConKey = mkPreludeTyConUnique 80
802 genUnitTyConKey = mkPreludeTyConUnique 81
804 -- Parallel array type constructor
805 parrTyConKey = mkPreludeTyConUnique 82
808 objectTyConKey = mkPreludeTyConUnique 83
810 eitherTyConKey = mkPreludeTyConUnique 84
812 -- Super Kinds constructors
813 tySuperKindTyConKey = mkPreludeTyConUnique 85
814 coSuperKindTyConKey = mkPreludeTyConUnique 86
817 liftedTypeKindTyConKey = mkPreludeTyConUnique 87
818 openTypeKindTyConKey = mkPreludeTyConUnique 88
819 unliftedTypeKindTyConKey = mkPreludeTyConUnique 89
820 ubxTupleKindTyConKey = mkPreludeTyConUnique 90
821 argTypeKindTyConKey = mkPreludeTyConUnique 91
823 -- Coercion constructors
824 symCoercionTyConKey = mkPreludeTyConUnique 93
825 transCoercionTyConKey = mkPreludeTyConUnique 94
826 leftCoercionTyConKey = mkPreludeTyConUnique 95
827 rightCoercionTyConKey = mkPreludeTyConUnique 96
828 instCoercionTyConKey = mkPreludeTyConUnique 97
829 unsafeCoercionTyConKey = mkPreludeTyConUnique 98
831 opaqueTyConKey = mkPreludeTyConUnique 103
833 ---------------- Template Haskell -------------------
834 -- USES TyConUniques 100-129
835 -----------------------------------------------------
837 unitTyConKey = mkTupleTyConUnique Boxed 0
840 %************************************************************************
842 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
844 %************************************************************************
847 charDataConKey = mkPreludeDataConUnique 1
848 consDataConKey = mkPreludeDataConUnique 2
849 doubleDataConKey = mkPreludeDataConUnique 3
850 falseDataConKey = mkPreludeDataConUnique 4
851 floatDataConKey = mkPreludeDataConUnique 5
852 intDataConKey = mkPreludeDataConUnique 6
853 smallIntegerDataConKey = mkPreludeDataConUnique 7
854 largeIntegerDataConKey = mkPreludeDataConUnique 8
855 nilDataConKey = mkPreludeDataConUnique 11
856 ratioDataConKey = mkPreludeDataConUnique 12
857 stableNameDataConKey = mkPreludeDataConUnique 14
858 trueDataConKey = mkPreludeDataConUnique 15
859 wordDataConKey = mkPreludeDataConUnique 16
860 ioDataConKey = mkPreludeDataConUnique 17
862 -- Generic data constructors
863 crossDataConKey = mkPreludeDataConUnique 20
864 inlDataConKey = mkPreludeDataConUnique 21
865 inrDataConKey = mkPreludeDataConUnique 22
866 genUnitDataConKey = mkPreludeDataConUnique 23
868 -- Data constructor for parallel arrays
869 parrDataConKey = mkPreludeDataConUnique 24
871 leftDataConKey = mkPreludeDataConUnique 25
872 rightDataConKey = mkPreludeDataConUnique 26
875 %************************************************************************
877 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
879 %************************************************************************
882 absentErrorIdKey = mkPreludeMiscIdUnique 1
883 augmentIdKey = mkPreludeMiscIdUnique 3
884 appendIdKey = mkPreludeMiscIdUnique 4
885 buildIdKey = mkPreludeMiscIdUnique 5
886 errorIdKey = mkPreludeMiscIdUnique 6
887 foldlIdKey = mkPreludeMiscIdUnique 7
888 foldrIdKey = mkPreludeMiscIdUnique 8
889 recSelErrorIdKey = mkPreludeMiscIdUnique 9
890 integerMinusOneIdKey = mkPreludeMiscIdUnique 10
891 integerPlusOneIdKey = mkPreludeMiscIdUnique 11
892 integerPlusTwoIdKey = mkPreludeMiscIdUnique 12
893 integerZeroIdKey = mkPreludeMiscIdUnique 13
894 int2IntegerIdKey = mkPreludeMiscIdUnique 14
895 seqIdKey = mkPreludeMiscIdUnique 15
896 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 16
897 eqStringIdKey = mkPreludeMiscIdUnique 17
898 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 18
899 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
900 runtimeErrorIdKey = mkPreludeMiscIdUnique 20
901 parErrorIdKey = mkPreludeMiscIdUnique 21
902 parIdKey = mkPreludeMiscIdUnique 22
903 patErrorIdKey = mkPreludeMiscIdUnique 23
904 realWorldPrimIdKey = mkPreludeMiscIdUnique 24
905 recConErrorIdKey = mkPreludeMiscIdUnique 25
906 recUpdErrorIdKey = mkPreludeMiscIdUnique 26
907 traceIdKey = mkPreludeMiscIdUnique 27
908 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 28
909 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 29
910 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 30
911 unpackCStringIdKey = mkPreludeMiscIdUnique 31
913 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
914 concatIdKey = mkPreludeMiscIdUnique 33
915 filterIdKey = mkPreludeMiscIdUnique 34
916 zipIdKey = mkPreludeMiscIdUnique 35
917 bindIOIdKey = mkPreludeMiscIdUnique 36
918 returnIOIdKey = mkPreludeMiscIdUnique 37
919 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
920 newStablePtrIdKey = mkPreludeMiscIdUnique 39
921 plusIntegerIdKey = mkPreludeMiscIdUnique 41
922 timesIntegerIdKey = mkPreludeMiscIdUnique 42
923 printIdKey = mkPreludeMiscIdUnique 43
924 failIOIdKey = mkPreludeMiscIdUnique 44
925 nullAddrIdKey = mkPreludeMiscIdUnique 46
926 voidArgIdKey = mkPreludeMiscIdUnique 47
927 fstIdKey = mkPreludeMiscIdUnique 49
928 sndIdKey = mkPreludeMiscIdUnique 50
929 otherwiseIdKey = mkPreludeMiscIdUnique 51
930 assertIdKey = mkPreludeMiscIdUnique 53
931 runSTRepIdKey = mkPreludeMiscIdUnique 54
933 rootMainKey = mkPreludeMiscIdUnique 55
934 runMainKey = mkPreludeMiscIdUnique 56
936 andIdKey = mkPreludeMiscIdUnique 57
937 orIdKey = mkPreludeMiscIdUnique 58
938 thenIOIdKey = mkPreludeMiscIdUnique 59
939 lazyIdKey = mkPreludeMiscIdUnique 60
940 assertErrorIdKey = mkPreludeMiscIdUnique 61
942 breakpointIdKey = mkPreludeMiscIdUnique 62
943 breakpointCondIdKey = mkPreludeMiscIdUnique 63
944 breakpointAutoIdKey = mkPreludeMiscIdUnique 64
945 breakpointJumpIdKey = mkPreludeMiscIdUnique 65
946 breakpointCondJumpIdKey = mkPreludeMiscIdUnique 66
947 breakpointAutoJumpIdKey = mkPreludeMiscIdUnique 67
949 inlineIdKey = mkPreludeMiscIdUnique 68
951 -- Parallel array functions
952 nullPIdKey = mkPreludeMiscIdUnique 80
953 lengthPIdKey = mkPreludeMiscIdUnique 81
954 replicatePIdKey = mkPreludeMiscIdUnique 82
955 mapPIdKey = mkPreludeMiscIdUnique 83
956 filterPIdKey = mkPreludeMiscIdUnique 84
957 zipPIdKey = mkPreludeMiscIdUnique 85
958 crossPIdKey = mkPreludeMiscIdUnique 86
959 indexPIdKey = mkPreludeMiscIdUnique 87
960 toPIdKey = mkPreludeMiscIdUnique 88
961 enumFromToPIdKey = mkPreludeMiscIdUnique 89
962 enumFromThenToPIdKey = mkPreludeMiscIdUnique 90
963 bpermutePIdKey = mkPreludeMiscIdUnique 91
964 bpermuteDftPIdKey = mkPreludeMiscIdUnique 92
965 indexOfPIdKey = mkPreludeMiscIdUnique 93
968 unmarshalObjectIdKey = mkPreludeMiscIdUnique 94
969 marshalObjectIdKey = mkPreludeMiscIdUnique 95
970 marshalStringIdKey = mkPreludeMiscIdUnique 96
971 unmarshalStringIdKey = mkPreludeMiscIdUnique 97
972 checkDotnetResNameIdKey = mkPreludeMiscIdUnique 98
976 Certain class operations from Prelude classes. They get their own
977 uniques so we can look them up easily when we want to conjure them up
978 during type checking.
981 -- Just a place holder for unbound variables produced by the renamer:
982 unboundKey = mkPreludeMiscIdUnique 101
984 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
985 minusClassOpKey = mkPreludeMiscIdUnique 103
986 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
987 enumFromClassOpKey = mkPreludeMiscIdUnique 105
988 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
989 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
990 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
991 eqClassOpKey = mkPreludeMiscIdUnique 109
992 geClassOpKey = mkPreludeMiscIdUnique 110
993 negateClassOpKey = mkPreludeMiscIdUnique 111
994 failMClassOpKey = mkPreludeMiscIdUnique 112
995 bindMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
996 thenMClassOpKey = mkPreludeMiscIdUnique 114 -- (>>)
997 returnMClassOpKey = mkPreludeMiscIdUnique 117
999 -- Recursive do notation
1000 mfixIdKey = mkPreludeMiscIdUnique 118
1003 arrAIdKey = mkPreludeMiscIdUnique 119
1004 composeAIdKey = mkPreludeMiscIdUnique 120 -- >>>
1005 firstAIdKey = mkPreludeMiscIdUnique 121
1006 appAIdKey = mkPreludeMiscIdUnique 122
1007 choiceAIdKey = mkPreludeMiscIdUnique 123 -- |||
1008 loopAIdKey = mkPreludeMiscIdUnique 124
1010 ---------------- Template Haskell -------------------
1011 -- USES IdUniques 200-399
1012 -----------------------------------------------------
1016 %************************************************************************
1018 \subsection{Standard groups of types}
1020 %************************************************************************
1033 %************************************************************************
1035 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1037 %************************************************************************
1039 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1040 even though every numeric class has these two as a superclass,
1041 because the list of ambiguous dictionaries hasn't been simplified.
1049 ++ fractionalClassKeys
1051 fractionalClassKeys =
1052 [ fractionalClassKey
1058 -- the strictness analyser needs to know about numeric types
1059 -- (see SaAbsInt.lhs)
1060 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1064 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1065 -- and are: "classes defined in the Prelude or a standard library"
1066 standardClassKeys = derivableClassKeys ++ numericClassKeys
1067 ++ [randomClassKey, randomGenClassKey,
1069 monadClassKey, monadPlusClassKey]
1072 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1077 = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1078 boundedClassKey, showClassKey, readClassKey ]