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 = mkLocalName (mkKindOccFS tcName str) uq
586 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
587 -- And they don't come from any particular module; indeed we always
588 -- want to print them unqualified. Hence the LocalName
590 varQual_RDR mod str = mkOrig varName mod str
591 tcQual_RDR mod str = mkOrig tcName mod str
592 clsQual_RDR mod str = mkOrig clsName mod str
593 dataQual_RDR mod str = mkOrig dataName mod str
596 %************************************************************************
598 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
600 %************************************************************************
603 boundedClassKey = mkPreludeClassUnique 1
604 enumClassKey = mkPreludeClassUnique 2
605 eqClassKey = mkPreludeClassUnique 3
606 floatingClassKey = mkPreludeClassUnique 5
607 fractionalClassKey = mkPreludeClassUnique 6
608 integralClassKey = mkPreludeClassUnique 7
609 monadClassKey = mkPreludeClassUnique 8
610 monadPlusClassKey = mkPreludeClassUnique 9
611 functorClassKey = mkPreludeClassUnique 10
612 numClassKey = mkPreludeClassUnique 11
613 ordClassKey = mkPreludeClassUnique 12
614 readClassKey = mkPreludeClassUnique 13
615 realClassKey = mkPreludeClassUnique 14
616 realFloatClassKey = mkPreludeClassUnique 15
617 realFracClassKey = mkPreludeClassUnique 16
618 showClassKey = mkPreludeClassUnique 17
620 cCallableClassKey = mkPreludeClassUnique 18
621 cReturnableClassKey = mkPreludeClassUnique 19
623 ixClassKey = mkPreludeClassUnique 20
626 %************************************************************************
628 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
630 %************************************************************************
633 addrPrimTyConKey = mkPreludeTyConUnique 1
634 addrTyConKey = mkPreludeTyConUnique 2
635 arrayPrimTyConKey = mkPreludeTyConUnique 3
636 boolTyConKey = mkPreludeTyConUnique 4
637 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
638 charPrimTyConKey = mkPreludeTyConUnique 7
639 charTyConKey = mkPreludeTyConUnique 8
640 doublePrimTyConKey = mkPreludeTyConUnique 9
641 doubleTyConKey = mkPreludeTyConUnique 10
642 floatPrimTyConKey = mkPreludeTyConUnique 11
643 floatTyConKey = mkPreludeTyConUnique 12
644 funTyConKey = mkPreludeTyConUnique 13
645 intPrimTyConKey = mkPreludeTyConUnique 14
646 intTyConKey = mkPreludeTyConUnique 15
647 int8TyConKey = mkPreludeTyConUnique 16
648 int16TyConKey = mkPreludeTyConUnique 17
649 int32TyConKey = mkPreludeTyConUnique 18
650 int64PrimTyConKey = mkPreludeTyConUnique 19
651 int64TyConKey = mkPreludeTyConUnique 20
652 integerTyConKey = mkPreludeTyConUnique 21
653 listTyConKey = mkPreludeTyConUnique 22
654 foreignObjPrimTyConKey = mkPreludeTyConUnique 23
655 foreignObjTyConKey = mkPreludeTyConUnique 24
656 weakPrimTyConKey = mkPreludeTyConUnique 25
657 mutableArrayPrimTyConKey = mkPreludeTyConUnique 26
658 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 27
659 orderingTyConKey = mkPreludeTyConUnique 28
660 mVarPrimTyConKey = mkPreludeTyConUnique 29
661 ratioTyConKey = mkPreludeTyConUnique 30
662 rationalTyConKey = mkPreludeTyConUnique 31
663 realWorldTyConKey = mkPreludeTyConUnique 32
664 stablePtrPrimTyConKey = mkPreludeTyConUnique 33
665 stablePtrTyConKey = mkPreludeTyConUnique 34
666 statePrimTyConKey = mkPreludeTyConUnique 35
667 stableNamePrimTyConKey = mkPreludeTyConUnique 50
668 stableNameTyConKey = mkPreludeTyConUnique 51
669 mutableByteArrayTyConKey = mkPreludeTyConUnique 52
670 mutVarPrimTyConKey = mkPreludeTyConUnique 53
671 ioTyConKey = mkPreludeTyConUnique 55
672 byteArrayTyConKey = mkPreludeTyConUnique 56
673 wordPrimTyConKey = mkPreludeTyConUnique 57
674 wordTyConKey = mkPreludeTyConUnique 58
675 word8TyConKey = mkPreludeTyConUnique 59
676 word16TyConKey = mkPreludeTyConUnique 60
677 word32TyConKey = mkPreludeTyConUnique 61
678 word64PrimTyConKey = mkPreludeTyConUnique 62
679 word64TyConKey = mkPreludeTyConUnique 63
680 boxedConKey = mkPreludeTyConUnique 64
681 unboxedConKey = mkPreludeTyConUnique 65
682 anyBoxConKey = mkPreludeTyConUnique 66
683 kindConKey = mkPreludeTyConUnique 67
684 boxityConKey = mkPreludeTyConUnique 68
685 typeConKey = mkPreludeTyConUnique 69
686 threadIdPrimTyConKey = mkPreludeTyConUnique 70
687 bcoPrimTyConKey = mkPreludeTyConUnique 71
689 -- Usage type constructors
690 usageConKey = mkPreludeTyConUnique 72
691 usOnceTyConKey = mkPreludeTyConUnique 73
692 usManyTyConKey = mkPreludeTyConUnique 74
694 -- Generic Type Constructors
695 crossTyConKey = mkPreludeTyConUnique 75
696 plusTyConKey = mkPreludeTyConUnique 76
697 genUnitTyConKey = mkPreludeTyConUnique 77
700 %************************************************************************
702 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
704 %************************************************************************
707 addrDataConKey = mkPreludeDataConUnique 0
708 charDataConKey = mkPreludeDataConUnique 1
709 consDataConKey = mkPreludeDataConUnique 2
710 doubleDataConKey = mkPreludeDataConUnique 3
711 falseDataConKey = mkPreludeDataConUnique 4
712 floatDataConKey = mkPreludeDataConUnique 5
713 intDataConKey = mkPreludeDataConUnique 6
714 smallIntegerDataConKey = mkPreludeDataConUnique 7
715 largeIntegerDataConKey = mkPreludeDataConUnique 8
716 foreignObjDataConKey = mkPreludeDataConUnique 9
717 nilDataConKey = mkPreludeDataConUnique 10
718 ratioDataConKey = mkPreludeDataConUnique 11
719 stablePtrDataConKey = mkPreludeDataConUnique 12
720 stableNameDataConKey = mkPreludeDataConUnique 13
721 trueDataConKey = mkPreludeDataConUnique 14
722 wordDataConKey = mkPreludeDataConUnique 15
723 ioDataConKey = mkPreludeDataConUnique 16
725 -- Generic data constructors
726 crossDataConKey = mkPreludeDataConUnique 17
727 inlDataConKey = mkPreludeDataConUnique 18
728 inrDataConKey = mkPreludeDataConUnique 19
729 genUnitDataConKey = mkPreludeDataConUnique 20
732 %************************************************************************
734 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
736 %************************************************************************
739 absentErrorIdKey = mkPreludeMiscIdUnique 1
740 appendIdKey = mkPreludeMiscIdUnique 2
741 augmentIdKey = mkPreludeMiscIdUnique 3
742 buildIdKey = mkPreludeMiscIdUnique 4
743 errorIdKey = mkPreludeMiscIdUnique 5
744 foldlIdKey = mkPreludeMiscIdUnique 6
745 foldrIdKey = mkPreludeMiscIdUnique 7
746 recSelErrIdKey = mkPreludeMiscIdUnique 8
747 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
748 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
749 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
750 integerZeroIdKey = mkPreludeMiscIdUnique 12
751 int2IntegerIdKey = mkPreludeMiscIdUnique 13
752 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
753 eqStringIdKey = mkPreludeMiscIdUnique 16
754 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
755 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
756 parErrorIdKey = mkPreludeMiscIdUnique 20
757 parIdKey = mkPreludeMiscIdUnique 21
758 patErrorIdKey = mkPreludeMiscIdUnique 22
759 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
760 recConErrorIdKey = mkPreludeMiscIdUnique 24
761 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
762 traceIdKey = mkPreludeMiscIdUnique 26
763 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
764 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
765 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
766 unpackCStringIdKey = mkPreludeMiscIdUnique 30
767 ushowListIdKey = mkPreludeMiscIdUnique 31
768 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
769 concatIdKey = mkPreludeMiscIdUnique 33
770 filterIdKey = mkPreludeMiscIdUnique 34
771 zipIdKey = mkPreludeMiscIdUnique 35
772 bindIOIdKey = mkPreludeMiscIdUnique 36
773 returnIOIdKey = mkPreludeMiscIdUnique 37
774 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
775 newStablePtrIdKey = mkPreludeMiscIdUnique 39
776 getTagIdKey = mkPreludeMiscIdUnique 40
777 plusIntegerIdKey = mkPreludeMiscIdUnique 41
778 timesIntegerIdKey = mkPreludeMiscIdUnique 42
781 Certain class operations from Prelude classes. They get their own
782 uniques so we can look them up easily when we want to conjure them up
783 during type checking.
786 fromIntClassOpKey = mkPreludeMiscIdUnique 101
787 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
788 minusClassOpKey = mkPreludeMiscIdUnique 103
789 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
790 enumFromClassOpKey = mkPreludeMiscIdUnique 105
791 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
792 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
793 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
794 eqClassOpKey = mkPreludeMiscIdUnique 109
795 geClassOpKey = mkPreludeMiscIdUnique 110
796 failMClassOpKey = mkPreludeMiscIdUnique 112
797 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
798 -- Just a place holder for unbound variables produced by the renamer:
799 unboundKey = mkPreludeMiscIdUnique 114
800 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
802 mainKey = mkPreludeMiscIdUnique 116
803 returnMClassOpKey = mkPreludeMiscIdUnique 117
804 otherwiseIdKey = mkPreludeMiscIdUnique 118
805 toEnumClassOpKey = mkPreludeMiscIdUnique 119
806 mapIdKey = mkPreludeMiscIdUnique 120
810 assertIdKey = mkPreludeMiscIdUnique 121
811 runSTRepIdKey = mkPreludeMiscIdUnique 122
815 %************************************************************************
817 \subsection{Standard groups of types}
819 %************************************************************************
831 -- Renamer always imports these data decls replete with constructors
832 -- so that desugarer can always see their constructors. Ugh!
837 , mutableByteArrayTyConKey
852 %************************************************************************
854 \subsection[Class-std-groups]{Standard groups of Prelude classes}
856 %************************************************************************
858 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
861 @derivingOccurrences@ maps a class name to a list of the (qualified)
862 occurrences that will be mentioned by the derived code for the class
863 when it is later generated. We don't need to put in things that are
864 WiredIn (because they are already mapped to their correct name by the
865 @NameSupply@. The class itself, and all its class ops, is already
866 flagged as an occurrence so we don't need to mention that either.
868 @derivingOccurrences@ has an item for every derivable class, even if
869 that item is empty, because we treat lookup failure as indicating that
870 the class is illegal in a deriving clause.
873 derivingOccurrences :: UniqFM [RdrName]
874 derivingOccurrences = listToUFM deriving_occ_info
876 derivableClassKeys = map fst deriving_occ_info
879 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
880 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
881 -- EQ (from Ordering) is needed to force in the constructors
882 -- as well as the type constructor.
883 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
884 -- The last two Enum deps are only used to produce better
885 -- error msgs for derived toEnum methods.
886 , (boundedClassKey, [intTyCon_RDR])
887 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
888 showParen_RDR, showSpace_RDR, showList___RDR])
889 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
890 foldr_RDR, build_RDR,
891 -- foldr and build required for list comprehension
893 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
894 -- returnM (and the rest of the Monad class decl)
895 -- will be forced in as result of depending
896 -- on thenM. -- SOF 1/99
897 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
898 foldr_RDR, build_RDR,
899 -- foldr and build required for list comprehension used
900 -- with single constructor types -- KSW 2000-06
901 returnM_RDR, failM_RDR])
902 -- the last two are needed to force returnM, thenM and failM
903 -- in before typechecking the list(monad) comprehension
904 -- generated for derived Ix instances (range method)
905 -- of single constructor types. -- SOF 8/97
907 -- intTyCon: Practically any deriving needs Int, either for index calculations,
909 -- ordClass: really it's the methods that are actually used.
910 -- numClass: for Int literals
914 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
915 even though every numeric class has these two as a superclass,
916 because the list of ambiguous dictionaries hasn't been simplified.
924 ++ fractionalClassKeys
926 fractionalClassKeys =
933 -- the strictness analyser needs to know about numeric types
934 -- (see SaAbsInt.lhs)
935 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
941 , cReturnableClassKey
945 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
947 -- We have to have "CCallable" and "CReturnable" in the standard
948 -- classes, so that if you go...
950 -- _ccall_ foo ... 93{-numeric literal-} ...
952 -- ... it can do The Right Thing on the 93.
954 noDictClassKeys -- These classes are used only for type annotations;
955 -- they are not implemented by dictionaries, ever.
960 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
961 -- during compiler debugging.
962 mkUnboundName :: RdrName -> Name
963 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
965 isUnboundName :: Name -> Bool
966 isUnboundName name = name `hasKey` unboundKey