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, mkModuleName )
40 import OccName ( NameSpace, UserFS, varName, dataName, tcName, clsName, mkKindOccFS )
41 import RdrName ( RdrName, mkOrig, mkRdrOrig, mkUnqual )
43 import Unique ( Unique, Uniquable(..), hasKey,
44 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
45 mkPreludeTyConUnique, mkPreludeClassUnique
47 import BasicTypes ( Boxity(..), Arity )
48 import UniqFM ( UniqFM, listToUFM )
49 import Name ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
50 import RdrName ( rdrNameOcc )
51 import SrcLoc ( noSrcLoc )
52 import Util ( nOfThem )
53 import Panic ( panic )
57 %************************************************************************
59 \subsection{Known key Names}
61 %************************************************************************
63 This section tells what the compiler knows about the assocation of
64 names with uniques. These ones are the *non* wired-in ones. The
65 wired in ones are defined in TysWiredIn etc.
68 knownKeyNames :: [Name]
71 -- Type constructors (synonyms especially)
79 mutableByteArrayTyConName,
85 -- Classes. *Must* include:
86 -- classes that are grabbed by key (e.g., eqClassKey)
87 -- classes in "Class.standardClassKeys" (quite a few)
88 eqClassName, -- mentioned, derivable
89 ordClassName, -- derivable
90 boundedClassName, -- derivable
91 numClassName, -- mentioned, numeric
92 enumClassName, -- derivable
96 showClassName, -- derivable
97 realClassName, -- numeric
98 integralClassName, -- numeric
99 fractionalClassName, -- numeric
100 floatingClassName, -- numeric
101 realFracClassName, -- numeric
102 realFloatClassName, -- numeric
103 readClassName, -- derivable
104 ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm)
105 cCallableClassName, -- mentioned, ccallish
106 cReturnableClassName, -- mentioned, ccallish
134 unpackCStringAppendName,
135 unpackCStringFoldrName,
136 unpackCStringUtf8Name,
146 -- FFI primitive types that are not wired-in.
167 %************************************************************************
169 \subsection{Module names}
171 %************************************************************************
174 pRELUDE_Name = mkModuleName "Prelude"
175 pREL_GHC_Name = mkModuleName "PrelGHC" -- Primitive types and values
176 pREL_BASE_Name = mkModuleName "PrelBase"
177 pREL_ENUM_Name = mkModuleName "PrelEnum"
178 pREL_SHOW_Name = mkModuleName "PrelShow"
179 pREL_READ_Name = mkModuleName "PrelRead"
180 pREL_NUM_Name = mkModuleName "PrelNum"
181 pREL_LIST_Name = mkModuleName "PrelList"
182 pREL_TUP_Name = mkModuleName "PrelTup"
183 pREL_PACK_Name = mkModuleName "PrelPack"
184 pREL_CONC_Name = mkModuleName "PrelConc"
185 pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
186 pREL_ST_Name = mkModuleName "PrelST"
187 pREL_ARR_Name = mkModuleName "PrelArr"
188 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
189 pREL_FOREIGN_Name = mkModuleName "PrelForeign"
190 pREL_STABLE_Name = mkModuleName "PrelStable"
191 pREL_ADDR_Name = mkModuleName "PrelAddr"
192 pREL_ERR_Name = mkModuleName "PrelErr"
193 pREL_REAL_Name = mkModuleName "PrelReal"
194 pREL_FLOAT_Name = mkModuleName "PrelFloat"
196 pREL_MAIN_Name = mkModuleName "PrelMain"
197 mAIN_Name = mkModuleName "Main"
198 iNT_Name = mkModuleName "Int"
199 wORD_Name = mkModuleName "Word"
201 pREL_GHC = mkPrelModule pREL_GHC_Name
202 pREL_BASE = mkPrelModule pREL_BASE_Name
203 pREL_ADDR = mkPrelModule pREL_ADDR_Name
204 pREL_STABLE = mkPrelModule pREL_STABLE_Name
205 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
206 pREL_PACK = mkPrelModule pREL_PACK_Name
207 pREL_ERR = mkPrelModule pREL_ERR_Name
208 pREL_NUM = mkPrelModule pREL_NUM_Name
209 pREL_REAL = mkPrelModule pREL_REAL_Name
210 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
213 %************************************************************************
215 \subsection{Constructing the names of tuples
217 %************************************************************************
220 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
222 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
223 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
224 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)") -- not strictly necessary
225 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)") -- ditto
226 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
227 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
229 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
230 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
231 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
232 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
233 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
234 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
236 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
237 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
238 (mod, occ) -> mkOrig space mod occ
242 %************************************************************************
244 \subsection{Unqualified RdrNames}
246 %************************************************************************
249 main_RDR_Unqual :: RdrName
250 main_RDR_Unqual = mkUnqual varName SLIT("main")
251 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
252 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
257 %************************************************************************
259 \subsection{Commonly-used RdrNames}
261 %************************************************************************
263 Many of these Names are not really "built in", but some parts of the
264 compiler (notably the deriving mechanism) need to mention their names,
265 and it's convenient to write them all down in one place.
268 mainName = varQual mAIN_Name SLIT("main") mainKey
270 -- Stuff from PrelGHC
271 usOnceTyConName = kindQual SLIT(".") usOnceTyConKey
272 usManyTyConName = kindQual SLIT("!") usManyTyConKey
273 superKindName = kindQual SLIT("KX") kindConKey
274 superBoxityName = kindQual SLIT("BX") boxityConKey
275 boxedConName = kindQual SLIT("*") boxedConKey
276 unboxedConName = kindQual SLIT("#") unboxedConKey
277 openKindConName = kindQual SLIT("?") anyBoxConKey
278 usageKindConName = kindQual SLIT("$") usageConKey
279 typeConName = kindQual SLIT("Type") typeConKey
281 funTyConName = tcQual pREL_GHC_Name SLIT("(->)") funTyConKey
282 charPrimTyConName = tcQual pREL_GHC_Name SLIT("Char#") charPrimTyConKey
283 intPrimTyConName = tcQual pREL_GHC_Name SLIT("Int#") intPrimTyConKey
284 int64PrimTyConName = tcQual pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey
285 wordPrimTyConName = tcQual pREL_GHC_Name SLIT("Word#") wordPrimTyConKey
286 word64PrimTyConName = tcQual pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey
287 addrPrimTyConName = tcQual pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey
288 floatPrimTyConName = tcQual pREL_GHC_Name SLIT("Float#") floatPrimTyConKey
289 doublePrimTyConName = tcQual pREL_GHC_Name SLIT("Double#") doublePrimTyConKey
290 statePrimTyConName = tcQual pREL_GHC_Name SLIT("State#") statePrimTyConKey
291 realWorldTyConName = tcQual pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey
292 arrayPrimTyConName = tcQual pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey
293 byteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey
294 mutableArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey
295 mutableByteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
296 mutVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey
297 mVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey
298 stablePtrPrimTyConName = tcQual pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey
299 stableNamePrimTyConName = tcQual pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey
300 foreignObjPrimTyConName = tcQual pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey
301 bcoPrimTyConName = tcQual pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey
302 weakPrimTyConName = tcQual pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey
303 threadIdPrimTyConName = tcQual pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey
304 cCallableClassName = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
305 cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
307 -- PrelBase data types and constructors
308 charTyConName = tcQual pREL_BASE_Name SLIT("Char") charTyConKey
309 charDataConName = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
310 intTyConName = tcQual pREL_BASE_Name SLIT("Int") intTyConKey
311 intDataConName = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
312 orderingTyConName = tcQual pREL_BASE_Name SLIT("Ordering") orderingTyConKey
313 boolTyConName = tcQual pREL_BASE_Name SLIT("Bool") boolTyConKey
314 falseDataConName = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
315 trueDataConName = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
316 listTyConName = tcQual pREL_BASE_Name SLIT("[]") listTyConKey
317 nilDataConName = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
318 consDataConName = dataQual pREL_BASE_Name SLIT(":") consDataConKey
321 crossTyConName = tcQual pREL_BASE_Name SLIT(":*:") crossTyConKey
322 crossDataConName = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
323 plusTyConName = tcQual pREL_BASE_Name SLIT(":+:") plusTyConKey
324 inlDataConName = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
325 inrDataConName = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
326 genUnitTyConName = tcQual pREL_BASE_Name SLIT("Unit") genUnitTyConKey
327 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
329 -- Random PrelBase functions
330 otherwiseIdName = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
331 appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
332 foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
333 mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
334 buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
335 augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
336 eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
339 unpackCStringName = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
340 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
341 unpackCStringFoldrName = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
342 unpackCStringUtf8Name = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
344 -- Classes Eq and Ord
345 eqClassName = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
346 ordClassName = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
347 eqName = varQual pREL_BASE_Name SLIT("==") eqClassOpKey
348 geName = varQual pREL_BASE_Name SLIT(">=") geClassOpKey
351 monadClassName = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
352 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
353 thenMName = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
354 returnMName = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
355 failMName = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
358 functorClassName = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
361 showClassName = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
364 readClassName = clsQual pREL_READ_Name SLIT("Read") readClassKey
367 numClassName = clsQual pREL_NUM_Name SLIT("Num") numClassKey
368 fromIntName = varQual pREL_NUM_Name SLIT("fromInt") fromIntClassOpKey
369 fromIntegerName = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
370 minusName = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
371 plusIntegerName = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
372 timesIntegerName = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
373 integerTyConName = tcQual pREL_NUM_Name SLIT("Integer") integerTyConKey
374 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
375 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
377 -- PrelReal types and classes
378 rationalTyConName = tcQual pREL_REAL_Name SLIT("Rational") rationalTyConKey
379 ratioTyConName = tcQual pREL_REAL_Name SLIT("Ratio") ratioTyConKey
380 ratioDataConName = dataQual pREL_REAL_Name SLIT(":%") ratioDataConKey
381 realClassName = clsQual pREL_REAL_Name SLIT("Real") realClassKey
382 integralClassName = clsQual pREL_REAL_Name SLIT("Integral") integralClassKey
383 realFracClassName = clsQual pREL_REAL_Name SLIT("RealFrac") realFracClassKey
384 fractionalClassName = clsQual pREL_REAL_Name SLIT("Fractional") fractionalClassKey
385 fromRationalName = varQual pREL_REAL_Name SLIT("fromRational") fromRationalClassOpKey
388 floatTyConName = tcQual pREL_FLOAT_Name SLIT("Float") floatTyConKey
389 floatDataConName = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
390 doubleTyConName = tcQual pREL_FLOAT_Name SLIT("Double") doubleTyConKey
391 doubleDataConName = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
392 floatingClassName = clsQual pREL_FLOAT_Name SLIT("Floating") floatingClassKey
393 realFloatClassName = clsQual pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
396 ixClassName = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
399 enumClassName = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
400 toEnumName = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
401 fromEnumName = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
402 enumFromName = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
403 enumFromToName = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
404 enumFromThenName = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
405 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
408 boundedClassName = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
411 concatName = varQual pREL_LIST_Name SLIT("concat") concatIdKey
412 filterName = varQual pREL_LIST_Name SLIT("filter") filterIdKey
413 zipName = varQual pREL_LIST_Name SLIT("zip") zipIdKey
416 ioTyConName = tcQual pREL_IO_BASE_Name SLIT("IO") ioTyConKey
417 ioDataConName = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
418 bindIOName = varQual pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
419 returnIOName = varQual pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
421 -- Int, Word, and Addr things
422 int8TyConName = tcQual iNT_Name SLIT("Int8") int8TyConKey
423 int16TyConName = tcQual iNT_Name SLIT("Int16") int16TyConKey
424 int32TyConName = tcQual iNT_Name SLIT("Int32") int32TyConKey
425 int64TyConName = tcQual pREL_ADDR_Name SLIT("Int64") int64TyConKey
427 wordTyConName = tcQual pREL_ADDR_Name SLIT("Word") wordTyConKey
428 wordDataConName = dataQual pREL_ADDR_Name SLIT("W#") wordDataConKey
429 word8TyConName = tcQual wORD_Name SLIT("Word8") word8TyConKey
430 word16TyConName = tcQual wORD_Name SLIT("Word16") word16TyConKey
431 word32TyConName = tcQual wORD_Name SLIT("Word32") word32TyConKey
432 word64TyConName = tcQual pREL_ADDR_Name SLIT("Word64") word64TyConKey
434 addrTyConName = tcQual pREL_ADDR_Name SLIT("Addr") addrTyConKey
435 addrDataConName = dataQual pREL_ADDR_Name SLIT("A#") addrDataConKey
439 byteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("ByteArray") byteArrayTyConKey
440 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("MutableByteArray") mutableByteArrayTyConKey
442 -- Forign objects and weak pointers
443 foreignObjTyConName = tcQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjTyConKey
444 foreignObjDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjDataConKey
445 stablePtrTyConName = tcQual pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
446 stablePtrDataConName = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
447 deRefStablePtrName = varQual pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
448 newStablePtrName = varQual pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
450 errorName = varQual pREL_ERR_Name SLIT("error") errorIdKey
451 assertName = varQual pREL_GHC_Name SLIT("assert") assertIdKey
452 getTagName = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
453 runSTRepName = varQual pREL_ST_Name SLIT("runSTRep") runSTRepIdKey
456 %************************************************************************
458 \subsection{Known names}
460 %************************************************************************
462 The following names are known to the compiler, but they don't require
463 pre-assigned keys. Mostly these names are used in generating deriving
464 code, which is passed through the renamer anyway.
466 THEY ARE ALL ORIGINAL NAMES, HOWEVER
470 tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName
471 ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName
473 tupleCon_RDR = mkTupConRdrName dataName Boxed
474 tupleTyCon_RDR = mkTupConRdrName tcName Boxed
475 ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed
476 ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed
478 unitCon_RDR = dataQual_RDR pREL_BASE_Name SLIT("()")
479 unitTyCon_RDR = tcQual_RDR pREL_BASE_Name SLIT("()")
481 and_RDR = varQual_RDR pREL_BASE_Name SLIT("&&")
482 not_RDR = varQual_RDR pREL_BASE_Name SLIT("not")
483 compose_RDR = varQual_RDR pREL_BASE_Name SLIT(".")
484 ne_RDR = varQual_RDR pREL_BASE_Name SLIT("/=")
485 le_RDR = varQual_RDR pREL_BASE_Name SLIT("<=")
486 lt_RDR = varQual_RDR pREL_BASE_Name SLIT("<")
487 gt_RDR = varQual_RDR pREL_BASE_Name SLIT(">")
488 ltTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("LT")
489 eqTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("EQ")
490 gtTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("GT")
491 max_RDR = varQual_RDR pREL_BASE_Name SLIT("max")
492 min_RDR = varQual_RDR pREL_BASE_Name SLIT("min")
493 compare_RDR = varQual_RDR pREL_BASE_Name SLIT("compare")
494 showList_RDR = varQual_RDR pREL_SHOW_Name SLIT("showList")
495 showList___RDR = varQual_RDR pREL_SHOW_Name SLIT("showList__")
496 showsPrec_RDR = varQual_RDR pREL_SHOW_Name SLIT("showsPrec")
497 showSpace_RDR = varQual_RDR pREL_SHOW_Name SLIT("showSpace")
498 showString_RDR = varQual_RDR pREL_SHOW_Name SLIT("showString")
499 showParen_RDR = varQual_RDR pREL_SHOW_Name SLIT("showParen")
500 readsPrec_RDR = varQual_RDR pREL_READ_Name SLIT("readsPrec")
501 readList_RDR = varQual_RDR pREL_READ_Name SLIT("readList")
502 readParen_RDR = varQual_RDR pREL_READ_Name SLIT("readParen")
503 lex_RDR = varQual_RDR pREL_READ_Name SLIT("lex")
504 readList___RDR = varQual_RDR pREL_READ_Name SLIT("readList__")
505 times_RDR = varQual_RDR pREL_NUM_Name SLIT("*")
506 plus_RDR = varQual_RDR pREL_NUM_Name SLIT("+")
507 negate_RDR = varQual_RDR pREL_NUM_Name SLIT("negate")
508 range_RDR = varQual_RDR pREL_ARR_Name SLIT("range")
509 index_RDR = varQual_RDR pREL_ARR_Name SLIT("index")
510 inRange_RDR = varQual_RDR pREL_ARR_Name SLIT("inRange")
511 succ_RDR = varQual_RDR pREL_ENUM_Name SLIT("succ")
512 pred_RDR = varQual_RDR pREL_ENUM_Name SLIT("pred")
513 minBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("minBound")
514 maxBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("maxBound")
515 assertErr_RDR = varQual_RDR pREL_ERR_Name SLIT("assertError")
518 These RDR names also have known keys, so we need to get back the RDR names to
519 populate the occurrence list above.
522 funTyCon_RDR = nameRdrName funTyConName
523 nilCon_RDR = nameRdrName nilDataConName
524 listTyCon_RDR = nameRdrName listTyConName
525 ioTyCon_RDR = nameRdrName ioTyConName
526 intTyCon_RDR = nameRdrName intTyConName
527 eq_RDR = nameRdrName eqName
528 ge_RDR = nameRdrName geName
529 numClass_RDR = nameRdrName numClassName
530 ordClass_RDR = nameRdrName ordClassName
531 map_RDR = nameRdrName mapName
532 append_RDR = nameRdrName appendName
533 foldr_RDR = nameRdrName foldrName
534 build_RDR = nameRdrName buildName
535 enumFromTo_RDR = nameRdrName enumFromToName
536 returnM_RDR = nameRdrName returnMName
537 thenM_RDR = nameRdrName thenMName
538 failM_RDR = nameRdrName failMName
539 false_RDR = nameRdrName falseDataConName
540 true_RDR = nameRdrName trueDataConName
541 error_RDR = nameRdrName errorName
542 getTag_RDR = nameRdrName getTagName
543 fromEnum_RDR = nameRdrName fromEnumName
544 toEnum_RDR = nameRdrName toEnumName
545 enumFrom_RDR = nameRdrName enumFromName
546 mkInt_RDR = nameRdrName intDataConName
547 enumFromThen_RDR = nameRdrName enumFromThenName
548 enumFromThenTo_RDR = nameRdrName enumFromThenToName
549 ratioDataCon_RDR = nameRdrName ratioDataConName
550 plusInteger_RDR = nameRdrName plusIntegerName
551 timesInteger_RDR = nameRdrName timesIntegerName
552 enumClass_RDR = nameRdrName enumClassName
553 monadClass_RDR = nameRdrName monadClassName
554 ioDataCon_RDR = nameRdrName ioDataConName
555 cCallableClass_RDR = nameRdrName cCallableClassName
556 cReturnableClass_RDR = nameRdrName cReturnableClassName
557 eqClass_RDR = nameRdrName eqClassName
558 eqString_RDR = nameRdrName eqStringName
559 unpackCString_RDR = nameRdrName unpackCStringName
560 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
561 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
562 deRefStablePtr_RDR = nameRdrName deRefStablePtrName
563 newStablePtr_RDR = nameRdrName newStablePtrName
564 bindIO_RDR = nameRdrName bindIOName
565 returnIO_RDR = nameRdrName returnIOName
566 fromInteger_RDR = nameRdrName fromIntegerName
567 fromRational_RDR = nameRdrName fromRationalName
568 minus_RDR = nameRdrName minusName
571 %************************************************************************
573 \subsection{Local helpers}
575 %************************************************************************
577 All these are original names; hence mkOrig
580 varQual mod str uq = mkKnownKeyGlobal (varQual_RDR mod str) uq
581 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
582 tcQual mod str uq = mkKnownKeyGlobal (tcQual_RDR mod str) uq
583 clsQual mod str uq = mkKnownKeyGlobal (clsQual_RDR mod str) uq
585 kindQual str uq = mkKnownKeyGlobal (mkRdrOrig pREL_GHC_Name (mkKindOccFS tcName str)) uq
586 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
587 -- And they all come from PrelGHC
589 varQual_RDR mod str = mkOrig varName mod str
590 tcQual_RDR mod str = mkOrig tcName mod str
591 clsQual_RDR mod str = mkOrig clsName mod str
592 dataQual_RDR mod str = mkOrig dataName mod str
595 %************************************************************************
597 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
599 %************************************************************************
602 boundedClassKey = mkPreludeClassUnique 1
603 enumClassKey = mkPreludeClassUnique 2
604 eqClassKey = mkPreludeClassUnique 3
605 floatingClassKey = mkPreludeClassUnique 5
606 fractionalClassKey = mkPreludeClassUnique 6
607 integralClassKey = mkPreludeClassUnique 7
608 monadClassKey = mkPreludeClassUnique 8
609 monadPlusClassKey = mkPreludeClassUnique 9
610 functorClassKey = mkPreludeClassUnique 10
611 numClassKey = mkPreludeClassUnique 11
612 ordClassKey = mkPreludeClassUnique 12
613 readClassKey = mkPreludeClassUnique 13
614 realClassKey = mkPreludeClassUnique 14
615 realFloatClassKey = mkPreludeClassUnique 15
616 realFracClassKey = mkPreludeClassUnique 16
617 showClassKey = mkPreludeClassUnique 17
619 cCallableClassKey = mkPreludeClassUnique 18
620 cReturnableClassKey = mkPreludeClassUnique 19
622 ixClassKey = mkPreludeClassUnique 20
625 %************************************************************************
627 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
629 %************************************************************************
632 addrPrimTyConKey = mkPreludeTyConUnique 1
633 addrTyConKey = mkPreludeTyConUnique 2
634 arrayPrimTyConKey = mkPreludeTyConUnique 3
635 boolTyConKey = mkPreludeTyConUnique 4
636 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
637 charPrimTyConKey = mkPreludeTyConUnique 7
638 charTyConKey = mkPreludeTyConUnique 8
639 doublePrimTyConKey = mkPreludeTyConUnique 9
640 doubleTyConKey = mkPreludeTyConUnique 10
641 floatPrimTyConKey = mkPreludeTyConUnique 11
642 floatTyConKey = mkPreludeTyConUnique 12
643 funTyConKey = mkPreludeTyConUnique 13
644 intPrimTyConKey = mkPreludeTyConUnique 14
645 intTyConKey = mkPreludeTyConUnique 15
646 int8TyConKey = mkPreludeTyConUnique 16
647 int16TyConKey = mkPreludeTyConUnique 17
648 int32TyConKey = mkPreludeTyConUnique 18
649 int64PrimTyConKey = mkPreludeTyConUnique 19
650 int64TyConKey = mkPreludeTyConUnique 20
651 integerTyConKey = mkPreludeTyConUnique 21
652 listTyConKey = mkPreludeTyConUnique 22
653 foreignObjPrimTyConKey = mkPreludeTyConUnique 23
654 foreignObjTyConKey = mkPreludeTyConUnique 24
655 weakPrimTyConKey = mkPreludeTyConUnique 25
656 mutableArrayPrimTyConKey = mkPreludeTyConUnique 26
657 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 27
658 orderingTyConKey = mkPreludeTyConUnique 28
659 mVarPrimTyConKey = mkPreludeTyConUnique 29
660 ratioTyConKey = mkPreludeTyConUnique 30
661 rationalTyConKey = mkPreludeTyConUnique 31
662 realWorldTyConKey = mkPreludeTyConUnique 32
663 stablePtrPrimTyConKey = mkPreludeTyConUnique 33
664 stablePtrTyConKey = mkPreludeTyConUnique 34
665 statePrimTyConKey = mkPreludeTyConUnique 35
666 stableNamePrimTyConKey = mkPreludeTyConUnique 50
667 stableNameTyConKey = mkPreludeTyConUnique 51
668 mutableByteArrayTyConKey = mkPreludeTyConUnique 52
669 mutVarPrimTyConKey = mkPreludeTyConUnique 53
670 ioTyConKey = mkPreludeTyConUnique 55
671 byteArrayTyConKey = mkPreludeTyConUnique 56
672 wordPrimTyConKey = mkPreludeTyConUnique 57
673 wordTyConKey = mkPreludeTyConUnique 58
674 word8TyConKey = mkPreludeTyConUnique 59
675 word16TyConKey = mkPreludeTyConUnique 60
676 word32TyConKey = mkPreludeTyConUnique 61
677 word64PrimTyConKey = mkPreludeTyConUnique 62
678 word64TyConKey = mkPreludeTyConUnique 63
679 boxedConKey = mkPreludeTyConUnique 64
680 unboxedConKey = mkPreludeTyConUnique 65
681 anyBoxConKey = mkPreludeTyConUnique 66
682 kindConKey = mkPreludeTyConUnique 67
683 boxityConKey = mkPreludeTyConUnique 68
684 typeConKey = mkPreludeTyConUnique 69
685 threadIdPrimTyConKey = mkPreludeTyConUnique 70
686 bcoPrimTyConKey = mkPreludeTyConUnique 71
688 -- Usage type constructors
689 usageConKey = mkPreludeTyConUnique 72
690 usOnceTyConKey = mkPreludeTyConUnique 73
691 usManyTyConKey = mkPreludeTyConUnique 74
693 -- Generic Type Constructors
694 crossTyConKey = mkPreludeTyConUnique 75
695 plusTyConKey = mkPreludeTyConUnique 76
696 genUnitTyConKey = mkPreludeTyConUnique 77
699 %************************************************************************
701 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
703 %************************************************************************
706 addrDataConKey = mkPreludeDataConUnique 0
707 charDataConKey = mkPreludeDataConUnique 1
708 consDataConKey = mkPreludeDataConUnique 2
709 doubleDataConKey = mkPreludeDataConUnique 3
710 falseDataConKey = mkPreludeDataConUnique 4
711 floatDataConKey = mkPreludeDataConUnique 5
712 intDataConKey = mkPreludeDataConUnique 6
713 smallIntegerDataConKey = mkPreludeDataConUnique 7
714 largeIntegerDataConKey = mkPreludeDataConUnique 8
715 foreignObjDataConKey = mkPreludeDataConUnique 9
716 nilDataConKey = mkPreludeDataConUnique 10
717 ratioDataConKey = mkPreludeDataConUnique 11
718 stablePtrDataConKey = mkPreludeDataConUnique 12
719 stableNameDataConKey = mkPreludeDataConUnique 13
720 trueDataConKey = mkPreludeDataConUnique 14
721 wordDataConKey = mkPreludeDataConUnique 15
722 ioDataConKey = mkPreludeDataConUnique 16
724 -- Generic data constructors
725 crossDataConKey = mkPreludeDataConUnique 17
726 inlDataConKey = mkPreludeDataConUnique 18
727 inrDataConKey = mkPreludeDataConUnique 19
728 genUnitDataConKey = mkPreludeDataConUnique 20
731 %************************************************************************
733 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
735 %************************************************************************
738 absentErrorIdKey = mkPreludeMiscIdUnique 1
739 appendIdKey = mkPreludeMiscIdUnique 2
740 augmentIdKey = mkPreludeMiscIdUnique 3
741 buildIdKey = mkPreludeMiscIdUnique 4
742 errorIdKey = mkPreludeMiscIdUnique 5
743 foldlIdKey = mkPreludeMiscIdUnique 6
744 foldrIdKey = mkPreludeMiscIdUnique 7
745 recSelErrIdKey = mkPreludeMiscIdUnique 8
746 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
747 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
748 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
749 integerZeroIdKey = mkPreludeMiscIdUnique 12
750 int2IntegerIdKey = mkPreludeMiscIdUnique 13
751 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
752 eqStringIdKey = mkPreludeMiscIdUnique 16
753 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
754 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
755 parErrorIdKey = mkPreludeMiscIdUnique 20
756 parIdKey = mkPreludeMiscIdUnique 21
757 patErrorIdKey = mkPreludeMiscIdUnique 22
758 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
759 recConErrorIdKey = mkPreludeMiscIdUnique 24
760 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
761 traceIdKey = mkPreludeMiscIdUnique 26
762 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
763 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
764 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
765 unpackCStringIdKey = mkPreludeMiscIdUnique 30
766 ushowListIdKey = mkPreludeMiscIdUnique 31
767 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
768 concatIdKey = mkPreludeMiscIdUnique 33
769 filterIdKey = mkPreludeMiscIdUnique 34
770 zipIdKey = mkPreludeMiscIdUnique 35
771 bindIOIdKey = mkPreludeMiscIdUnique 36
772 returnIOIdKey = mkPreludeMiscIdUnique 37
773 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
774 newStablePtrIdKey = mkPreludeMiscIdUnique 39
775 getTagIdKey = mkPreludeMiscIdUnique 40
776 plusIntegerIdKey = mkPreludeMiscIdUnique 41
777 timesIntegerIdKey = mkPreludeMiscIdUnique 42
780 Certain class operations from Prelude classes. They get their own
781 uniques so we can look them up easily when we want to conjure them up
782 during type checking.
785 fromIntClassOpKey = mkPreludeMiscIdUnique 101
786 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
787 minusClassOpKey = mkPreludeMiscIdUnique 103
788 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
789 enumFromClassOpKey = mkPreludeMiscIdUnique 105
790 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
791 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
792 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
793 eqClassOpKey = mkPreludeMiscIdUnique 109
794 geClassOpKey = mkPreludeMiscIdUnique 110
795 failMClassOpKey = mkPreludeMiscIdUnique 112
796 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
797 -- Just a place holder for unbound variables produced by the renamer:
798 unboundKey = mkPreludeMiscIdUnique 114
799 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
801 mainKey = mkPreludeMiscIdUnique 116
802 returnMClassOpKey = mkPreludeMiscIdUnique 117
803 otherwiseIdKey = mkPreludeMiscIdUnique 118
804 toEnumClassOpKey = mkPreludeMiscIdUnique 119
805 mapIdKey = mkPreludeMiscIdUnique 120
809 assertIdKey = mkPreludeMiscIdUnique 121
810 runSTRepIdKey = mkPreludeMiscIdUnique 122
814 %************************************************************************
816 \subsection{Standard groups of types}
818 %************************************************************************
830 -- Renamer always imports these data decls replete with constructors
831 -- so that desugarer can always see their constructors. Ugh!
836 , mutableByteArrayTyConKey
851 %************************************************************************
853 \subsection[Class-std-groups]{Standard groups of Prelude classes}
855 %************************************************************************
857 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
860 @derivingOccurrences@ maps a class name to a list of the (qualified)
861 occurrences that will be mentioned by the derived code for the class
862 when it is later generated. We don't need to put in things that are
863 WiredIn (because they are already mapped to their correct name by the
864 @NameSupply@. The class itself, and all its class ops, is already
865 flagged as an occurrence so we don't need to mention that either.
867 @derivingOccurrences@ has an item for every derivable class, even if
868 that item is empty, because we treat lookup failure as indicating that
869 the class is illegal in a deriving clause.
872 derivingOccurrences :: UniqFM [RdrName]
873 derivingOccurrences = listToUFM deriving_occ_info
875 derivableClassKeys = map fst deriving_occ_info
878 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
879 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
880 -- EQ (from Ordering) is needed to force in the constructors
881 -- as well as the type constructor.
882 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
883 -- The last two Enum deps are only used to produce better
884 -- error msgs for derived toEnum methods.
885 , (boundedClassKey, [intTyCon_RDR])
886 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
887 showParen_RDR, showSpace_RDR, showList___RDR])
888 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
889 foldr_RDR, build_RDR,
890 -- foldr and build required for list comprehension
892 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
893 -- returnM (and the rest of the Monad class decl)
894 -- will be forced in as result of depending
895 -- on thenM. -- SOF 1/99
896 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
897 foldr_RDR, build_RDR,
898 -- foldr and build required for list comprehension used
899 -- with single constructor types -- KSW 2000-06
900 returnM_RDR, failM_RDR])
901 -- the last two are needed to force returnM, thenM and failM
902 -- in before typechecking the list(monad) comprehension
903 -- generated for derived Ix instances (range method)
904 -- of single constructor types. -- SOF 8/97
906 -- intTyCon: Practically any deriving needs Int, either for index calculations,
908 -- ordClass: really it's the methods that are actually used.
909 -- numClass: for Int literals
913 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
914 even though every numeric class has these two as a superclass,
915 because the list of ambiguous dictionaries hasn't been simplified.
923 ++ fractionalClassKeys
925 fractionalClassKeys =
932 -- the strictness analyser needs to know about numeric types
933 -- (see SaAbsInt.lhs)
934 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
940 , cReturnableClassKey
944 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
946 -- We have to have "CCallable" and "CReturnable" in the standard
947 -- classes, so that if you go...
949 -- _ccall_ foo ... 93{-numeric literal-} ...
951 -- ... it can do The Right Thing on the 93.
953 noDictClassKeys -- These classes are used only for type annotations;
954 -- they are not implemented by dictionaries, ever.
959 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
960 -- during compiler debugging.
961 mkUnboundName :: RdrName -> Name
962 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
964 isUnboundName :: Name -> Bool
965 isUnboundName name = name `hasKey` unboundKey