2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[PrelNames]{Definitions of prelude modules}
6 The strings identify built-in prelude modules. They are
7 defined here so as to avod
9 [oh dear, looks like the recursive module monster caught up with
10 and gobbled whoever was writing the above :-) -- SOF ]
14 Unique, Uniquable(..), hasKey, -- Re-exported for convenience
16 -----------------------------------------------------------
17 module PrelNames, -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR
18 -- (b) Uniques e.g. intTyConKey
19 -- So many that we export them all
21 -----------------------------------------------------------
23 mkTupNameStr, mkTupConRdrName,
25 SyntaxMap, vanillaSyntaxMap, SyntaxList, syntaxList,
27 ------------------------------------------------------------
28 -- Goups of classes and types
29 needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
30 fractionalClassKeys, numericClassKeys, standardClassKeys,
31 derivingOccurrences, -- For a given class C, this tells what other
32 derivableClassKeys, -- things are needed as a result of a
34 numericTyKeys, cCallishTyKeys,
36 mkUnboundName, isUnboundName
39 #include "HsVersions.h"
41 import Module ( ModuleName, mkPrelModule, mkModuleName )
42 import OccName ( NameSpace, UserFS, varName, dataName, tcName, clsName, mkKindOccFS )
43 import RdrName ( RdrName, mkOrig, mkUnqual )
45 import Unique ( Unique, Uniquable(..), hasKey,
46 mkPreludeMiscIdUnique, mkPreludeDataConUnique,
47 mkPreludeTyConUnique, mkPreludeClassUnique
49 import BasicTypes ( Boxity(..), Arity )
50 import UniqFM ( UniqFM, listToUFM )
51 import Name ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
52 import RdrName ( rdrNameOcc )
53 import SrcLoc ( builtinSrcLoc )
54 import Util ( nOfThem )
55 import Panic ( panic )
59 %************************************************************************
61 \subsection{Known key Names}
63 %************************************************************************
65 This section tells what the compiler knows about the assocation of
66 names with uniques. These ones are the *non* wired-in ones. The
67 wired in ones are defined in TysWiredIn etc.
70 knownKeyNames :: [Name]
73 -- Type constructors (synonyms especially)
81 mutableByteArrayTyConName,
88 -- Classes. *Must* include:
89 -- classes that are grabbed by key (e.g., eqClassKey)
90 -- classes in "Class.standardClassKeys" (quite a few)
91 eqClassName, -- mentioned, derivable
92 ordClassName, -- derivable
93 boundedClassName, -- derivable
94 numClassName, -- mentioned, numeric
95 enumClassName, -- derivable
99 showClassName, -- derivable
100 realClassName, -- numeric
101 integralClassName, -- numeric
102 fractionalClassName, -- numeric
103 floatingClassName, -- numeric
104 realFracClassName, -- numeric
105 realFloatClassName, -- numeric
106 readClassName, -- derivable
107 ixClassName, -- derivable (but it isn't Prelude.Ix; hmmm)
108 cCallableClassName, -- mentioned, ccallish
109 cReturnableClassName, -- mentioned, ccallish
137 unpackCStringAppendName,
138 unpackCStringFoldrName,
139 unpackCStringUtf8Name,
149 -- FFI primitive types that are not wired-in.
171 %************************************************************************
173 \subsection{Module names}
175 %************************************************************************
178 pRELUDE_Name = mkModuleName "Prelude"
179 pREL_GHC_Name = mkModuleName "PrelGHC" -- Primitive types and values
180 pREL_BASE_Name = mkModuleName "PrelBase"
181 pREL_ENUM_Name = mkModuleName "PrelEnum"
182 pREL_SHOW_Name = mkModuleName "PrelShow"
183 pREL_READ_Name = mkModuleName "PrelRead"
184 pREL_NUM_Name = mkModuleName "PrelNum"
185 pREL_LIST_Name = mkModuleName "PrelList"
186 pREL_TUP_Name = mkModuleName "PrelTup"
187 pREL_PACK_Name = mkModuleName "PrelPack"
188 pREL_CONC_Name = mkModuleName "PrelConc"
189 pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
190 pREL_IO_Name = mkModuleName "PrelIO"
191 pREL_ST_Name = mkModuleName "PrelST"
192 pREL_ARR_Name = mkModuleName "PrelArr"
193 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
194 pREL_FOREIGN_Name = mkModuleName "PrelForeign"
195 pREL_STABLE_Name = mkModuleName "PrelStable"
196 pREL_ADDR_Name = mkModuleName "PrelAddr"
197 pREL_PTR_Name = mkModuleName "PrelPtr"
198 pREL_ERR_Name = mkModuleName "PrelErr"
199 pREL_REAL_Name = mkModuleName "PrelReal"
200 pREL_FLOAT_Name = mkModuleName "PrelFloat"
202 pREL_MAIN_Name = mkModuleName "PrelMain"
203 mAIN_Name = mkModuleName "Main"
204 pREL_INT_Name = mkModuleName "PrelInt"
205 pREL_WORD_Name = mkModuleName "PrelWord"
207 fOREIGNOBJ_Name = mkModuleName "ForeignObj"
208 aDDR_Name = mkModuleName "Addr"
210 pREL_GHC = mkPrelModule pREL_GHC_Name
211 pREL_BASE = mkPrelModule pREL_BASE_Name
212 pREL_ADDR = mkPrelModule pREL_ADDR_Name
213 pREL_PTR = mkPrelModule pREL_PTR_Name
214 pREL_STABLE = mkPrelModule pREL_STABLE_Name
215 pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
216 pREL_PACK = mkPrelModule pREL_PACK_Name
217 pREL_ERR = mkPrelModule pREL_ERR_Name
218 pREL_NUM = mkPrelModule pREL_NUM_Name
219 pREL_REAL = mkPrelModule pREL_REAL_Name
220 pREL_FLOAT = mkPrelModule pREL_FLOAT_Name
223 %************************************************************************
225 \subsection{Constructing the names of tuples
227 %************************************************************************
230 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
232 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
233 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
234 mkTupNameStr Boxed 2 = (pREL_TUP_Name, _PK_ "(,)") -- not strictly necessary
235 mkTupNameStr Boxed 3 = (pREL_TUP_Name, _PK_ "(,,)") -- ditto
236 mkTupNameStr Boxed 4 = (pREL_TUP_Name, _PK_ "(,,,)") -- ditto
237 mkTupNameStr Boxed n = (pREL_TUP_Name, _PK_ ("(" ++ nOfThem (n-1) ',' ++ ")"))
239 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
240 mkTupNameStr Unboxed 1 = (pREL_GHC_Name, _PK_ "(# #)") -- 1 and 0 both make sense!!!
241 mkTupNameStr Unboxed 2 = (pREL_GHC_Name, _PK_ "(#,#)")
242 mkTupNameStr Unboxed 3 = (pREL_GHC_Name, _PK_ "(#,,#)")
243 mkTupNameStr Unboxed 4 = (pREL_GHC_Name, _PK_ "(#,,,#)")
244 mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
246 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName
247 mkTupConRdrName space boxity arity = case mkTupNameStr boxity arity of
248 (mod, occ) -> mkOrig space mod occ
252 %************************************************************************
254 \subsection{Unqualified RdrNames}
256 %************************************************************************
259 main_RDR_Unqual :: RdrName
260 main_RDR_Unqual = mkUnqual varName SLIT("main")
261 -- Don't get a RdrName from PrelNames.mainName, because nameRdrName
262 -- gets an Orig RdrName, and we want a Qual or Unqual one. An Unqual
267 %************************************************************************
269 \subsection{Commonly-used RdrNames}
271 %************************************************************************
273 Many of these Names are not really "built in", but some parts of the
274 compiler (notably the deriving mechanism) need to mention their names,
275 and it's convenient to write them all down in one place.
278 mainName = varQual mAIN_Name SLIT("main") mainKey
280 -- Stuff from PrelGHC
281 usOnceTyConName = kindQual SLIT(".") usOnceTyConKey
282 usManyTyConName = kindQual SLIT("!") usManyTyConKey
283 superKindName = kindQual SLIT("KX") kindConKey
284 superBoxityName = kindQual SLIT("BX") boxityConKey
285 liftedConName = kindQual SLIT("*") liftedConKey
286 unliftedConName = kindQual SLIT("#") unliftedConKey
287 openKindConName = kindQual SLIT("?") anyBoxConKey
288 usageKindConName = kindQual SLIT("$") usageConKey
289 typeConName = kindQual SLIT("Type") typeConKey
291 funTyConName = tcQual pREL_GHC_Name SLIT("(->)") funTyConKey
292 charPrimTyConName = tcQual pREL_GHC_Name SLIT("Char#") charPrimTyConKey
293 intPrimTyConName = tcQual pREL_GHC_Name SLIT("Int#") intPrimTyConKey
294 int64PrimTyConName = tcQual pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey
295 wordPrimTyConName = tcQual pREL_GHC_Name SLIT("Word#") wordPrimTyConKey
296 word64PrimTyConName = tcQual pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey
297 addrPrimTyConName = tcQual pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey
298 floatPrimTyConName = tcQual pREL_GHC_Name SLIT("Float#") floatPrimTyConKey
299 doublePrimTyConName = tcQual pREL_GHC_Name SLIT("Double#") doublePrimTyConKey
300 statePrimTyConName = tcQual pREL_GHC_Name SLIT("State#") statePrimTyConKey
301 realWorldTyConName = tcQual pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey
302 arrayPrimTyConName = tcQual pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey
303 byteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey
304 mutableArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey
305 mutableByteArrayPrimTyConName = tcQual pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey
306 mutVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey
307 mVarPrimTyConName = tcQual pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey
308 stablePtrPrimTyConName = tcQual pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey
309 stableNamePrimTyConName = tcQual pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey
310 foreignObjPrimTyConName = tcQual pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey
311 bcoPrimTyConName = tcQual pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey
312 weakPrimTyConName = tcQual pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey
313 threadIdPrimTyConName = tcQual pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey
314 cCallableClassName = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
315 cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
317 -- PrelBase data types and constructors
318 charTyConName = tcQual pREL_BASE_Name SLIT("Char") charTyConKey
319 charDataConName = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
320 intTyConName = tcQual pREL_BASE_Name SLIT("Int") intTyConKey
321 intDataConName = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
322 orderingTyConName = tcQual pREL_BASE_Name SLIT("Ordering") orderingTyConKey
323 boolTyConName = tcQual pREL_BASE_Name SLIT("Bool") boolTyConKey
324 falseDataConName = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
325 trueDataConName = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
326 listTyConName = tcQual pREL_BASE_Name SLIT("[]") listTyConKey
327 nilDataConName = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
328 consDataConName = dataQual pREL_BASE_Name SLIT(":") consDataConKey
331 crossTyConName = tcQual pREL_BASE_Name SLIT(":*:") crossTyConKey
332 crossDataConName = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
333 plusTyConName = tcQual pREL_BASE_Name SLIT(":+:") plusTyConKey
334 inlDataConName = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
335 inrDataConName = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
336 genUnitTyConName = tcQual pREL_BASE_Name SLIT("Unit") genUnitTyConKey
337 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
339 -- Random PrelBase functions
340 otherwiseIdName = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
341 appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
342 foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
343 mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
344 buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
345 augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
346 eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
349 unpackCStringName = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
350 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
351 unpackCStringFoldrName = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
352 unpackCStringUtf8Name = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
354 -- Classes Eq and Ord
355 eqClassName = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
356 ordClassName = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
357 eqName = varQual pREL_BASE_Name SLIT("==") eqClassOpKey
358 geName = varQual pREL_BASE_Name SLIT(">=") geClassOpKey
361 monadClassName = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
362 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
363 thenMName = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
364 returnMName = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
365 failMName = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
368 functorClassName = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
371 showClassName = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
374 readClassName = clsQual pREL_READ_Name SLIT("Read") readClassKey
377 numClassName = clsQual pREL_NUM_Name SLIT("Num") numClassKey
378 fromIntegerName = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
379 minusName = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
380 negateName = varQual pREL_NUM_Name SLIT("negate") negateClassOpKey
381 plusIntegerName = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
382 timesIntegerName = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
383 integerTyConName = tcQual pREL_NUM_Name SLIT("Integer") integerTyConKey
384 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
385 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
387 -- PrelReal types and classes
388 rationalTyConName = tcQual pREL_REAL_Name SLIT("Rational") rationalTyConKey
389 ratioTyConName = tcQual pREL_REAL_Name SLIT("Ratio") ratioTyConKey
390 ratioDataConName = dataQual pREL_REAL_Name SLIT(":%") ratioDataConKey
391 realClassName = clsQual pREL_REAL_Name SLIT("Real") realClassKey
392 integralClassName = clsQual pREL_REAL_Name SLIT("Integral") integralClassKey
393 realFracClassName = clsQual pREL_REAL_Name SLIT("RealFrac") realFracClassKey
394 fractionalClassName = clsQual pREL_REAL_Name SLIT("Fractional") fractionalClassKey
395 fromRationalName = varQual pREL_REAL_Name SLIT("fromRational") fromRationalClassOpKey
398 floatTyConName = tcQual pREL_FLOAT_Name SLIT("Float") floatTyConKey
399 floatDataConName = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
400 doubleTyConName = tcQual pREL_FLOAT_Name SLIT("Double") doubleTyConKey
401 doubleDataConName = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
402 floatingClassName = clsQual pREL_FLOAT_Name SLIT("Floating") floatingClassKey
403 realFloatClassName = clsQual pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
406 ixClassName = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
409 enumClassName = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
410 toEnumName = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
411 fromEnumName = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
412 enumFromName = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
413 enumFromToName = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
414 enumFromThenName = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
415 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
418 boundedClassName = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
421 concatName = varQual pREL_LIST_Name SLIT("concat") concatIdKey
422 filterName = varQual pREL_LIST_Name SLIT("filter") filterIdKey
423 zipName = varQual pREL_LIST_Name SLIT("zip") zipIdKey
426 ioTyConName = tcQual pREL_IO_BASE_Name SLIT("IO") ioTyConKey
427 ioDataConName = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
428 bindIOName = varQual pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
429 returnIOName = varQual pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
432 printName = varQual pREL_IO_Name SLIT("print") printIdKey
434 -- Int, Word, and Addr things
435 int8TyConName = tcQual pREL_INT_Name SLIT("Int8") int8TyConKey
436 int16TyConName = tcQual pREL_INT_Name SLIT("Int16") int16TyConKey
437 int32TyConName = tcQual pREL_INT_Name SLIT("Int32") int32TyConKey
438 int64TyConName = tcQual pREL_INT_Name SLIT("Int64") int64TyConKey
440 word8TyConName = tcQual pREL_WORD_Name SLIT("Word8") word8TyConKey
441 word16TyConName = tcQual pREL_WORD_Name SLIT("Word16") word16TyConKey
442 word32TyConName = tcQual pREL_WORD_Name SLIT("Word32") word32TyConKey
443 word64TyConName = tcQual pREL_WORD_Name SLIT("Word64") word64TyConKey
445 wordTyConName = tcQual pREL_WORD_Name SLIT("Word") wordTyConKey
446 wordDataConName = dataQual pREL_WORD_Name SLIT("W#") wordDataConKey
448 addrTyConName = tcQual aDDR_Name SLIT("Addr") addrTyConKey
449 addrDataConName = dataQual aDDR_Name SLIT("A#") addrDataConKey
451 ptrTyConName = tcQual pREL_PTR_Name SLIT("Ptr") ptrTyConKey
452 ptrDataConName = dataQual pREL_PTR_Name SLIT("Ptr") ptrDataConKey
455 byteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("ByteArray") byteArrayTyConKey
456 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("MutableByteArray") mutableByteArrayTyConKey
458 -- Forign objects and weak pointers
459 foreignObjTyConName = tcQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjTyConKey
460 foreignObjDataConName = dataQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjDataConKey
461 foreignPtrTyConName = tcQual pREL_IO_BASE_Name SLIT("ForeignPtr") foreignPtrTyConKey
462 foreignPtrDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignPtr") foreignPtrDataConKey
463 stablePtrTyConName = tcQual pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
464 stablePtrDataConName = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
465 deRefStablePtrName = varQual pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
466 newStablePtrName = varQual pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
468 errorName = varQual pREL_ERR_Name SLIT("error") errorIdKey
469 assertName = varQual pREL_GHC_Name SLIT("assert") assertIdKey
470 getTagName = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
471 runSTRepName = varQual pREL_ST_Name SLIT("runSTRep") runSTRepIdKey
474 %************************************************************************
476 \subsection{Known names}
478 %************************************************************************
480 The following names are known to the compiler, but they don't require
481 pre-assigned keys. Mostly these names are used in generating deriving
482 code, which is passed through the renamer anyway.
484 THEY ARE ALL ORIGINAL NAMES, HOWEVER
488 tupleCon_RDR, tupleTyCon_RDR :: Int -> RdrName
489 ubxTupleCon_RDR, ubxTupleTyCon_RDR :: Int -> RdrName
491 tupleCon_RDR = mkTupConRdrName dataName Boxed
492 tupleTyCon_RDR = mkTupConRdrName tcName Boxed
493 ubxTupleCon_RDR = mkTupConRdrName dataName Unboxed
494 ubxTupleTyCon_RDR = mkTupConRdrName tcName Unboxed
496 unitCon_RDR = dataQual_RDR pREL_BASE_Name SLIT("()")
497 unitTyCon_RDR = tcQual_RDR pREL_BASE_Name SLIT("()")
499 and_RDR = varQual_RDR pREL_BASE_Name SLIT("&&")
500 not_RDR = varQual_RDR pREL_BASE_Name SLIT("not")
501 compose_RDR = varQual_RDR pREL_BASE_Name SLIT(".")
502 ne_RDR = varQual_RDR pREL_BASE_Name SLIT("/=")
503 le_RDR = varQual_RDR pREL_BASE_Name SLIT("<=")
504 lt_RDR = varQual_RDR pREL_BASE_Name SLIT("<")
505 gt_RDR = varQual_RDR pREL_BASE_Name SLIT(">")
506 ltTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("LT")
507 eqTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("EQ")
508 gtTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("GT")
509 max_RDR = varQual_RDR pREL_BASE_Name SLIT("max")
510 min_RDR = varQual_RDR pREL_BASE_Name SLIT("min")
511 compare_RDR = varQual_RDR pREL_BASE_Name SLIT("compare")
512 showList_RDR = varQual_RDR pREL_SHOW_Name SLIT("showList")
513 showList___RDR = varQual_RDR pREL_SHOW_Name SLIT("showList__")
514 showsPrec_RDR = varQual_RDR pREL_SHOW_Name SLIT("showsPrec")
515 showSpace_RDR = varQual_RDR pREL_SHOW_Name SLIT("showSpace")
516 showString_RDR = varQual_RDR pREL_SHOW_Name SLIT("showString")
517 showParen_RDR = varQual_RDR pREL_SHOW_Name SLIT("showParen")
518 readsPrec_RDR = varQual_RDR pREL_READ_Name SLIT("readsPrec")
519 readList_RDR = varQual_RDR pREL_READ_Name SLIT("readList")
520 readParen_RDR = varQual_RDR pREL_READ_Name SLIT("readParen")
521 lex_RDR = varQual_RDR pREL_READ_Name SLIT("lex")
522 readList___RDR = varQual_RDR pREL_READ_Name SLIT("readList__")
523 times_RDR = varQual_RDR pREL_NUM_Name SLIT("*")
524 plus_RDR = varQual_RDR pREL_NUM_Name SLIT("+")
525 negate_RDR = varQual_RDR pREL_NUM_Name SLIT("negate")
526 range_RDR = varQual_RDR pREL_ARR_Name SLIT("range")
527 index_RDR = varQual_RDR pREL_ARR_Name SLIT("index")
528 inRange_RDR = varQual_RDR pREL_ARR_Name SLIT("inRange")
529 succ_RDR = varQual_RDR pREL_ENUM_Name SLIT("succ")
530 pred_RDR = varQual_RDR pREL_ENUM_Name SLIT("pred")
531 minBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("minBound")
532 maxBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("maxBound")
533 assertErr_RDR = varQual_RDR pREL_ERR_Name SLIT("assertError")
536 These RDR names also have known keys, so we need to get back the RDR names to
537 populate the occurrence list above.
540 funTyCon_RDR = nameRdrName funTyConName
541 nilCon_RDR = nameRdrName nilDataConName
542 listTyCon_RDR = nameRdrName listTyConName
543 ioTyCon_RDR = nameRdrName ioTyConName
544 intTyCon_RDR = nameRdrName intTyConName
545 eq_RDR = nameRdrName eqName
546 ge_RDR = nameRdrName geName
547 numClass_RDR = nameRdrName numClassName
548 ordClass_RDR = nameRdrName ordClassName
549 map_RDR = nameRdrName mapName
550 append_RDR = nameRdrName appendName
551 foldr_RDR = nameRdrName foldrName
552 build_RDR = nameRdrName buildName
553 enumFromTo_RDR = nameRdrName enumFromToName
554 returnM_RDR = nameRdrName returnMName
555 thenM_RDR = nameRdrName thenMName
556 failM_RDR = nameRdrName failMName
557 false_RDR = nameRdrName falseDataConName
558 true_RDR = nameRdrName trueDataConName
559 error_RDR = nameRdrName errorName
560 getTag_RDR = nameRdrName getTagName
561 fromEnum_RDR = nameRdrName fromEnumName
562 toEnum_RDR = nameRdrName toEnumName
563 enumFrom_RDR = nameRdrName enumFromName
564 mkInt_RDR = nameRdrName intDataConName
565 enumFromThen_RDR = nameRdrName enumFromThenName
566 enumFromThenTo_RDR = nameRdrName enumFromThenToName
567 ratioDataCon_RDR = nameRdrName ratioDataConName
568 plusInteger_RDR = nameRdrName plusIntegerName
569 timesInteger_RDR = nameRdrName timesIntegerName
570 enumClass_RDR = nameRdrName enumClassName
571 monadClass_RDR = nameRdrName monadClassName
572 ioDataCon_RDR = nameRdrName ioDataConName
573 cCallableClass_RDR = nameRdrName cCallableClassName
574 cReturnableClass_RDR = nameRdrName cReturnableClassName
575 eqClass_RDR = nameRdrName eqClassName
576 eqString_RDR = nameRdrName eqStringName
577 unpackCString_RDR = nameRdrName unpackCStringName
578 unpackCStringFoldr_RDR = nameRdrName unpackCStringFoldrName
579 unpackCStringUtf8_RDR = nameRdrName unpackCStringUtf8Name
580 deRefStablePtr_RDR = nameRdrName deRefStablePtrName
581 newStablePtr_RDR = nameRdrName newStablePtrName
582 bindIO_RDR = nameRdrName bindIOName
583 returnIO_RDR = nameRdrName returnIOName
584 fromInteger_RDR = nameRdrName fromIntegerName
585 fromRational_RDR = nameRdrName fromRationalName
586 minus_RDR = nameRdrName minusName
589 %************************************************************************
591 \subsection{Local helpers}
593 %************************************************************************
595 All these are original names; hence mkOrig
598 varQual mod str uq = mkKnownKeyGlobal (varQual_RDR mod str) uq
599 dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
600 tcQual mod str uq = mkKnownKeyGlobal (tcQual_RDR mod str) uq
601 clsQual mod str uq = mkKnownKeyGlobal (clsQual_RDR mod str) uq
603 kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
604 -- Kinds are not z-encoded in interface file, hence mkKindOccFS
605 -- And they don't come from any particular module; indeed we always
606 -- want to print them unqualified. Hence the LocalName
608 varQual_RDR mod str = mkOrig varName mod str
609 tcQual_RDR mod str = mkOrig tcName mod str
610 clsQual_RDR mod str = mkOrig clsName mod str
611 dataQual_RDR mod str = mkOrig dataName mod str
614 %************************************************************************
616 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
618 %************************************************************************
621 boundedClassKey = mkPreludeClassUnique 1
622 enumClassKey = mkPreludeClassUnique 2
623 eqClassKey = mkPreludeClassUnique 3
624 floatingClassKey = mkPreludeClassUnique 5
625 fractionalClassKey = mkPreludeClassUnique 6
626 integralClassKey = mkPreludeClassUnique 7
627 monadClassKey = mkPreludeClassUnique 8
628 monadPlusClassKey = mkPreludeClassUnique 9
629 functorClassKey = mkPreludeClassUnique 10
630 numClassKey = mkPreludeClassUnique 11
631 ordClassKey = mkPreludeClassUnique 12
632 readClassKey = mkPreludeClassUnique 13
633 realClassKey = mkPreludeClassUnique 14
634 realFloatClassKey = mkPreludeClassUnique 15
635 realFracClassKey = mkPreludeClassUnique 16
636 showClassKey = mkPreludeClassUnique 17
638 cCallableClassKey = mkPreludeClassUnique 18
639 cReturnableClassKey = mkPreludeClassUnique 19
641 ixClassKey = mkPreludeClassUnique 20
644 %************************************************************************
646 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
648 %************************************************************************
651 addrPrimTyConKey = mkPreludeTyConUnique 1
652 addrTyConKey = mkPreludeTyConUnique 2
653 arrayPrimTyConKey = mkPreludeTyConUnique 3
654 boolTyConKey = mkPreludeTyConUnique 4
655 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
656 charPrimTyConKey = mkPreludeTyConUnique 7
657 charTyConKey = mkPreludeTyConUnique 8
658 doublePrimTyConKey = mkPreludeTyConUnique 9
659 doubleTyConKey = mkPreludeTyConUnique 10
660 floatPrimTyConKey = mkPreludeTyConUnique 11
661 floatTyConKey = mkPreludeTyConUnique 12
662 funTyConKey = mkPreludeTyConUnique 13
663 intPrimTyConKey = mkPreludeTyConUnique 14
664 intTyConKey = mkPreludeTyConUnique 15
665 int8TyConKey = mkPreludeTyConUnique 16
666 int16TyConKey = mkPreludeTyConUnique 17
667 int32TyConKey = mkPreludeTyConUnique 18
668 int64PrimTyConKey = mkPreludeTyConUnique 19
669 int64TyConKey = mkPreludeTyConUnique 20
670 integerTyConKey = mkPreludeTyConUnique 21
671 listTyConKey = mkPreludeTyConUnique 22
672 foreignObjPrimTyConKey = mkPreludeTyConUnique 23
673 foreignObjTyConKey = mkPreludeTyConUnique 24
674 foreignPtrTyConKey = mkPreludeTyConUnique 25
675 weakPrimTyConKey = mkPreludeTyConUnique 26
676 mutableArrayPrimTyConKey = mkPreludeTyConUnique 27
677 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 28
678 orderingTyConKey = mkPreludeTyConUnique 29
679 mVarPrimTyConKey = mkPreludeTyConUnique 30
680 ratioTyConKey = mkPreludeTyConUnique 31
681 rationalTyConKey = mkPreludeTyConUnique 32
682 realWorldTyConKey = mkPreludeTyConUnique 33
683 stablePtrPrimTyConKey = mkPreludeTyConUnique 34
684 stablePtrTyConKey = mkPreludeTyConUnique 35
685 statePrimTyConKey = mkPreludeTyConUnique 36
686 stableNamePrimTyConKey = mkPreludeTyConUnique 50
687 stableNameTyConKey = mkPreludeTyConUnique 51
688 mutableByteArrayTyConKey = mkPreludeTyConUnique 52
689 mutVarPrimTyConKey = mkPreludeTyConUnique 53
690 ioTyConKey = mkPreludeTyConUnique 55
691 byteArrayTyConKey = mkPreludeTyConUnique 56
692 wordPrimTyConKey = mkPreludeTyConUnique 57
693 wordTyConKey = mkPreludeTyConUnique 58
694 word8TyConKey = mkPreludeTyConUnique 59
695 word16TyConKey = mkPreludeTyConUnique 60
696 word32TyConKey = mkPreludeTyConUnique 61
697 word64PrimTyConKey = mkPreludeTyConUnique 62
698 word64TyConKey = mkPreludeTyConUnique 63
699 liftedConKey = mkPreludeTyConUnique 64
700 unliftedConKey = mkPreludeTyConUnique 65
701 anyBoxConKey = mkPreludeTyConUnique 66
702 kindConKey = mkPreludeTyConUnique 67
703 boxityConKey = mkPreludeTyConUnique 68
704 typeConKey = mkPreludeTyConUnique 69
705 threadIdPrimTyConKey = mkPreludeTyConUnique 70
706 bcoPrimTyConKey = mkPreludeTyConUnique 71
707 ptrTyConKey = mkPreludeTyConUnique 72
709 -- Usage type constructors
710 usageConKey = mkPreludeTyConUnique 73
711 usOnceTyConKey = mkPreludeTyConUnique 74
712 usManyTyConKey = mkPreludeTyConUnique 75
714 -- Generic Type Constructors
715 crossTyConKey = mkPreludeTyConUnique 76
716 plusTyConKey = mkPreludeTyConUnique 77
717 genUnitTyConKey = mkPreludeTyConUnique 78
720 %************************************************************************
722 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
724 %************************************************************************
727 addrDataConKey = mkPreludeDataConUnique 0
728 charDataConKey = mkPreludeDataConUnique 1
729 consDataConKey = mkPreludeDataConUnique 2
730 doubleDataConKey = mkPreludeDataConUnique 3
731 falseDataConKey = mkPreludeDataConUnique 4
732 floatDataConKey = mkPreludeDataConUnique 5
733 intDataConKey = mkPreludeDataConUnique 6
734 smallIntegerDataConKey = mkPreludeDataConUnique 7
735 largeIntegerDataConKey = mkPreludeDataConUnique 8
736 foreignObjDataConKey = mkPreludeDataConUnique 9
737 foreignPtrDataConKey = mkPreludeDataConUnique 10
738 nilDataConKey = mkPreludeDataConUnique 11
739 ratioDataConKey = mkPreludeDataConUnique 12
740 stablePtrDataConKey = mkPreludeDataConUnique 13
741 stableNameDataConKey = mkPreludeDataConUnique 14
742 trueDataConKey = mkPreludeDataConUnique 15
743 wordDataConKey = mkPreludeDataConUnique 16
744 ioDataConKey = mkPreludeDataConUnique 17
745 ptrDataConKey = mkPreludeDataConUnique 18
747 -- Generic data constructors
748 crossDataConKey = mkPreludeDataConUnique 19
749 inlDataConKey = mkPreludeDataConUnique 20
750 inrDataConKey = mkPreludeDataConUnique 21
751 genUnitDataConKey = mkPreludeDataConUnique 22
754 %************************************************************************
756 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
758 %************************************************************************
761 absentErrorIdKey = mkPreludeMiscIdUnique 1
762 appendIdKey = mkPreludeMiscIdUnique 2
763 augmentIdKey = mkPreludeMiscIdUnique 3
764 buildIdKey = mkPreludeMiscIdUnique 4
765 errorIdKey = mkPreludeMiscIdUnique 5
766 foldlIdKey = mkPreludeMiscIdUnique 6
767 foldrIdKey = mkPreludeMiscIdUnique 7
768 recSelErrIdKey = mkPreludeMiscIdUnique 8
769 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
770 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
771 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
772 integerZeroIdKey = mkPreludeMiscIdUnique 12
773 int2IntegerIdKey = mkPreludeMiscIdUnique 13
774 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
775 eqStringIdKey = mkPreludeMiscIdUnique 16
776 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
777 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
778 parErrorIdKey = mkPreludeMiscIdUnique 20
779 parIdKey = mkPreludeMiscIdUnique 21
780 patErrorIdKey = mkPreludeMiscIdUnique 22
781 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
782 recConErrorIdKey = mkPreludeMiscIdUnique 24
783 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
784 traceIdKey = mkPreludeMiscIdUnique 26
785 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
786 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
787 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
788 unpackCStringIdKey = mkPreludeMiscIdUnique 30
789 ushowListIdKey = mkPreludeMiscIdUnique 31
790 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
791 concatIdKey = mkPreludeMiscIdUnique 33
792 filterIdKey = mkPreludeMiscIdUnique 34
793 zipIdKey = mkPreludeMiscIdUnique 35
794 bindIOIdKey = mkPreludeMiscIdUnique 36
795 returnIOIdKey = mkPreludeMiscIdUnique 37
796 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
797 newStablePtrIdKey = mkPreludeMiscIdUnique 39
798 getTagIdKey = mkPreludeMiscIdUnique 40
799 plusIntegerIdKey = mkPreludeMiscIdUnique 41
800 timesIntegerIdKey = mkPreludeMiscIdUnique 42
801 printIdKey = mkPreludeMiscIdUnique 43
804 Certain class operations from Prelude classes. They get their own
805 uniques so we can look them up easily when we want to conjure them up
806 during type checking.
809 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
810 minusClassOpKey = mkPreludeMiscIdUnique 103
811 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
812 enumFromClassOpKey = mkPreludeMiscIdUnique 105
813 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
814 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
815 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
816 eqClassOpKey = mkPreludeMiscIdUnique 109
817 geClassOpKey = mkPreludeMiscIdUnique 110
818 negateClassOpKey = mkPreludeMiscIdUnique 111
819 failMClassOpKey = mkPreludeMiscIdUnique 112
820 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
821 -- Just a place holder for unbound variables produced by the renamer:
822 unboundKey = mkPreludeMiscIdUnique 114
823 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
825 mainKey = mkPreludeMiscIdUnique 116
826 returnMClassOpKey = mkPreludeMiscIdUnique 117
827 otherwiseIdKey = mkPreludeMiscIdUnique 118
828 toEnumClassOpKey = mkPreludeMiscIdUnique 119
829 mapIdKey = mkPreludeMiscIdUnique 120
833 assertIdKey = mkPreludeMiscIdUnique 121
834 runSTRepIdKey = mkPreludeMiscIdUnique 122
838 %************************************************************************
840 \subsection{Standard groups of types}
842 %************************************************************************
854 -- Renamer always imports these data decls replete with constructors
855 -- so that desugarer can always see their constructors. Ugh!
860 , mutableByteArrayTyConKey
876 %************************************************************************
878 \subsection{Re-bindable desugaring names}
880 %************************************************************************
882 Haskell 98 says that when you say "3" you get the "fromInteger" from the
883 Standard Prelude, regardless of what is in scope. However, to experiment
884 with having a language that is less coupled to the standard prelude, we're
885 trying a non-standard extension that instead gives you whatever "Prelude.fromInteger"
886 happens to be in scope. Then you can
888 import MyPrelude as Prelude
889 to get the desired effect.
891 The SyntaxNames record gives all the names you can rebind in this way.
892 This record of names needs to go through the renamer to map RdrNames to
893 Names (i.e. look up the names in the in-scope environment), to suck in
894 their type signatures from interface file(s).
897 type SyntaxList = [(Name, RdrName)]
898 -- Maps a Name, which identifies the standard built-in thing
899 -- to a RdrName for the re-mapped version of the built-in thing
901 syntaxList :: SyntaxList
902 syntaxList =[ (fromIntegerName, mkUnqual varName SLIT("fromInteger"))
903 , (fromRationalName, mkUnqual varName SLIT("fromRational"))
904 , (negateName, mkUnqual varName SLIT("negate"))
905 , (minusName, mkUnqual varName SLIT("-"))
906 -- For now that's all. We may add booleans and lists later.
910 type SyntaxMap = Name -> Name
911 -- Maps a standard built-in name, such as PrelNum.fromInteger
912 -- to its re-mapped version, such as MyPrelude.fromInteger
914 vanillaSyntaxMap name = name
918 %************************************************************************
920 \subsection[Class-std-groups]{Standard groups of Prelude classes}
922 %************************************************************************
924 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
927 @derivingOccurrences@ maps a class name to a list of the (qualified)
928 occurrences that will be mentioned by the derived code for the class
929 when it is later generated. We don't need to put in things that are
930 WiredIn (because they are already mapped to their correct name by the
931 @NameSupply@. The class itself, and all its class ops, is already
932 flagged as an occurrence so we don't need to mention that either.
934 @derivingOccurrences@ has an item for every derivable class, even if
935 that item is empty, because we treat lookup failure as indicating that
936 the class is illegal in a deriving clause.
939 derivingOccurrences :: UniqFM [RdrName]
940 derivingOccurrences = listToUFM deriving_occ_info
942 derivableClassKeys = map fst deriving_occ_info
945 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
946 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
947 -- EQ (from Ordering) is needed to force in the constructors
948 -- as well as the type constructor.
949 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
950 -- The last two Enum deps are only used to produce better
951 -- error msgs for derived toEnum methods.
952 , (boundedClassKey, [intTyCon_RDR])
953 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
954 showParen_RDR, showSpace_RDR, showList___RDR])
955 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
956 foldr_RDR, build_RDR,
957 -- foldr and build required for list comprehension
959 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
960 -- returnM (and the rest of the Monad class decl)
961 -- will be forced in as result of depending
962 -- on thenM. -- SOF 1/99
963 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
964 foldr_RDR, build_RDR,
965 -- foldr and build required for list comprehension used
966 -- with single constructor types -- KSW 2000-06
967 returnM_RDR, failM_RDR])
968 -- the last two are needed to force returnM, thenM and failM
969 -- in before typechecking the list(monad) comprehension
970 -- generated for derived Ix instances (range method)
971 -- of single constructor types. -- SOF 8/97
973 -- intTyCon: Practically any deriving needs Int, either for index calculations,
975 -- ordClass: really it's the methods that are actually used.
976 -- numClass: for Int literals
980 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
981 even though every numeric class has these two as a superclass,
982 because the list of ambiguous dictionaries hasn't been simplified.
990 ++ fractionalClassKeys
992 fractionalClassKeys =
999 -- the strictness analyser needs to know about numeric types
1000 -- (see SaAbsInt.lhs)
1001 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1007 , cReturnableClassKey
1011 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1013 -- We have to have "CCallable" and "CReturnable" in the standard
1014 -- classes, so that if you go...
1016 -- _ccall_ foo ... 93{-numeric literal-} ...
1018 -- ... it can do The Right Thing on the 93.
1020 noDictClassKeys -- These classes are used only for type annotations;
1021 -- they are not implemented by dictionaries, ever.
1026 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
1027 -- during compiler debugging.
1028 mkUnboundName :: RdrName -> Name
1029 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
1031 isUnboundName :: Name -> Bool
1032 isUnboundName name = name `hasKey` unboundKey