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, varName, dataName, tcName, clsName )
41 import RdrName ( RdrName, mkPreludeQual )
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, FAST_STRING)
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) -> mkPreludeQual space mod occ
242 %************************************************************************
244 \subsection{Commonly-used RdrNames}
246 %************************************************************************
248 These RdrNames are not really "built in", but some parts of the
249 compiler (notably the deriving mechanism) need to mention their names,
250 and it's convenient to write them all down in one place.
253 mainName = varQual mAIN_Name SLIT("main") mainKey
255 -- Stuff from PrelGHC
256 funTyConName = tcQual pREL_GHC_Name SLIT("(->)") funTyConKey
257 cCallableClassName = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
258 cReturnableClassName = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
260 -- PrelBase data types and constructors
261 charTyConName = tcQual pREL_BASE_Name SLIT("Char") charTyConKey
262 charDataConName = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
263 intTyConName = tcQual pREL_BASE_Name SLIT("Int") intTyConKey
264 intDataConName = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
265 orderingTyConName = tcQual pREL_BASE_Name SLIT("Ordering") orderingTyConKey
266 boolTyConName = tcQual pREL_BASE_Name SLIT("Bool") boolTyConKey
267 falseDataConName = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
268 trueDataConName = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
269 listTyConName = tcQual pREL_BASE_Name SLIT("[]") listTyConKey
270 nilDataConName = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
271 consDataConName = dataQual pREL_BASE_Name SLIT(":") consDataConKey
274 crossTyConName = tcQual pREL_BASE_Name SLIT(":*:") crossTyConKey
275 crossDataConName = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
276 plusTyConName = tcQual pREL_BASE_Name SLIT(":+:") plusTyConKey
277 inlDataConName = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
278 inrDataConName = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
279 genUnitTyConName = tcQual pREL_BASE_Name SLIT("Unit") genUnitTyConKey
280 genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
282 -- Random PrelBase functions
283 otherwiseIdName = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
284 appendName = varQual pREL_BASE_Name SLIT("++") appendIdKey
285 foldrName = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
286 mapName = varQual pREL_BASE_Name SLIT("map") mapIdKey
287 buildName = varQual pREL_BASE_Name SLIT("build") buildIdKey
288 augmentName = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
289 eqStringName = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
292 unpackCStringName = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
293 unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
294 unpackCStringFoldrName = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
295 unpackCStringUtf8Name = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
297 -- Classes Eq and Ord
298 eqClassName = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
299 ordClassName = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
300 eqName = varQual pREL_BASE_Name SLIT("==") eqClassOpKey
301 geName = varQual pREL_BASE_Name SLIT(">=") geClassOpKey
304 monadClassName = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
305 monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
306 thenMName = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
307 returnMName = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
308 failMName = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
311 functorClassName = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
314 showClassName = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
317 readClassName = clsQual pREL_READ_Name SLIT("Read") readClassKey
320 numClassName = clsQual pREL_NUM_Name SLIT("Num") numClassKey
321 fromIntName = varQual pREL_NUM_Name SLIT("fromInt") fromIntClassOpKey
322 fromIntegerName = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
323 minusName = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
324 plusIntegerName = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
325 timesIntegerName = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
326 integerTyConName = tcQual pREL_NUM_Name SLIT("Integer") integerTyConKey
327 smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
328 largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
330 -- PrelReal types and classes
331 rationalTyConName = tcQual pREL_REAL_Name SLIT("Rational") rationalTyConKey
332 ratioTyConName = tcQual pREL_REAL_Name SLIT("Ratio") ratioTyConKey
333 ratioDataConName = dataQual pREL_REAL_Name SLIT(":%") ratioDataConKey
334 realClassName = clsQual pREL_REAL_Name SLIT("Real") realClassKey
335 integralClassName = clsQual pREL_REAL_Name SLIT("Integral") integralClassKey
336 realFracClassName = clsQual pREL_REAL_Name SLIT("RealFrac") realFracClassKey
337 fractionalClassName = clsQual pREL_REAL_Name SLIT("Fractional") fractionalClassKey
338 fromRationalName = varQual pREL_REAL_Name SLIT("fromRational") fromRationalClassOpKey
341 floatTyConName = tcQual pREL_FLOAT_Name SLIT("Float") floatTyConKey
342 floatDataConName = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
343 doubleTyConName = tcQual pREL_FLOAT_Name SLIT("Double") doubleTyConKey
344 doubleDataConName = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
345 floatingClassName = clsQual pREL_FLOAT_Name SLIT("Floating") floatingClassKey
346 realFloatClassName = clsQual pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
349 ixClassName = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
352 enumClassName = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
353 toEnumName = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
354 fromEnumName = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
355 enumFromName = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
356 enumFromToName = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
357 enumFromThenName = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
358 enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
361 boundedClassName = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
364 concatName = varQual pREL_LIST_Name SLIT("concat") concatIdKey
365 filterName = varQual pREL_LIST_Name SLIT("filter") filterIdKey
366 zipName = varQual pREL_LIST_Name SLIT("zip") zipIdKey
369 ioTyConName = tcQual pREL_IO_BASE_Name SLIT("IO") ioTyConKey
370 ioDataConName = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
371 bindIOName = varQual pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
372 returnIOName = varQual pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
374 -- Int, Word, and Addr things
375 int8TyConName = tcQual iNT_Name SLIT("Int8") int8TyConKey
376 int16TyConName = tcQual iNT_Name SLIT("Int16") int16TyConKey
377 int32TyConName = tcQual iNT_Name SLIT("Int32") int32TyConKey
378 int64TyConName = tcQual pREL_ADDR_Name SLIT("Int64") int64TyConKey
380 wordTyConName = tcQual pREL_ADDR_Name SLIT("Word") wordTyConKey
381 wordDataConName = dataQual pREL_ADDR_Name SLIT("W#") wordDataConKey
382 word8TyConName = tcQual wORD_Name SLIT("Word8") word8TyConKey
383 word16TyConName = tcQual wORD_Name SLIT("Word16") word16TyConKey
384 word32TyConName = tcQual wORD_Name SLIT("Word32") word32TyConKey
385 word64TyConName = tcQual pREL_ADDR_Name SLIT("Word64") word64TyConKey
387 addrTyConName = tcQual pREL_ADDR_Name SLIT("Addr") addrTyConKey
388 addrDataConName = dataQual pREL_ADDR_Name SLIT("A#") addrDataConKey
392 byteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("ByteArray") byteArrayTyConKey
393 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name SLIT("MutableByteArray") mutableByteArrayTyConKey
395 -- Forign objects and weak pointers
396 foreignObjTyConName = tcQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjTyConKey
397 foreignObjDataConName = dataQual pREL_IO_BASE_Name SLIT("ForeignObj") foreignObjDataConKey
398 bcoPrimTyConName = tcQual pREL_BASE_Name SLIT("BCO#") bcoPrimTyConKey
399 stablePtrTyConName = tcQual pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
400 stablePtrDataConName = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
401 deRefStablePtrName = varQual pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
402 makeStablePtrName = varQual pREL_STABLE_Name SLIT("makeStablePtr") makeStablePtrIdKey
404 errorName = varQual pREL_ERR_Name SLIT("error") errorIdKey
405 assertName = varQual pREL_GHC_Name SLIT("assert") assertIdKey
406 getTagName = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
407 runSTRepName = varQual pREL_ST_Name SLIT("runSTRep") runSTRepIdKey
410 %************************************************************************
412 \subsection{Known names}
414 %************************************************************************
416 The following names are known to the compiler, but they don't require
417 pre-assigned keys. Mostly these names are used in generating deriving
418 code, which is passed through the renamer anyway.
421 and_RDR = varQual_RDR pREL_BASE_Name SLIT("&&")
422 not_RDR = varQual_RDR pREL_BASE_Name SLIT("not")
423 compose_RDR = varQual_RDR pREL_BASE_Name SLIT(".")
424 ne_RDR = varQual_RDR pREL_BASE_Name SLIT("/=")
425 le_RDR = varQual_RDR pREL_BASE_Name SLIT("<=")
426 lt_RDR = varQual_RDR pREL_BASE_Name SLIT("<")
427 gt_RDR = varQual_RDR pREL_BASE_Name SLIT(">")
428 ltTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("LT")
429 eqTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("EQ")
430 gtTag_RDR = dataQual_RDR pREL_BASE_Name SLIT("GT")
431 max_RDR = varQual_RDR pREL_BASE_Name SLIT("max")
432 min_RDR = varQual_RDR pREL_BASE_Name SLIT("min")
433 compare_RDR = varQual_RDR pREL_BASE_Name SLIT("compare")
434 showList_RDR = varQual_RDR pREL_SHOW_Name SLIT("showList")
435 showList___RDR = varQual_RDR pREL_SHOW_Name SLIT("showList__")
436 showsPrec_RDR = varQual_RDR pREL_SHOW_Name SLIT("showsPrec")
437 showSpace_RDR = varQual_RDR pREL_SHOW_Name SLIT("showSpace")
438 showString_RDR = varQual_RDR pREL_SHOW_Name SLIT("showString")
439 showParen_RDR = varQual_RDR pREL_SHOW_Name SLIT("showParen")
440 readsPrec_RDR = varQual_RDR pREL_READ_Name SLIT("readsPrec")
441 readList_RDR = varQual_RDR pREL_READ_Name SLIT("readList")
442 readParen_RDR = varQual_RDR pREL_READ_Name SLIT("readParen")
443 lex_RDR = varQual_RDR pREL_READ_Name SLIT("lex")
444 readList___RDR = varQual_RDR pREL_READ_Name SLIT("readList__")
445 times_RDR = varQual_RDR pREL_NUM_Name SLIT("*")
446 plus_RDR = varQual_RDR pREL_NUM_Name SLIT("+")
447 negate_RDR = varQual_RDR pREL_NUM_Name SLIT("negate")
448 range_RDR = varQual_RDR pREL_ARR_Name SLIT("range")
449 index_RDR = varQual_RDR pREL_ARR_Name SLIT("index")
450 inRange_RDR = varQual_RDR pREL_ARR_Name SLIT("inRange")
451 succ_RDR = varQual_RDR pREL_ENUM_Name SLIT("succ")
452 pred_RDR = varQual_RDR pREL_ENUM_Name SLIT("pred")
453 minBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("minBound")
454 maxBound_RDR = varQual_RDR pREL_ENUM_Name SLIT("maxBound")
455 assertErr_RDR = varQual_RDR pREL_ERR_Name SLIT("assertError")
458 %************************************************************************
460 \subsection{Local helpers}
462 %************************************************************************
465 varQual mod str uq = mkKnownKeyGlobal (mkPreludeQual varName mod str) uq
466 dataQual mod str uq = mkKnownKeyGlobal (mkPreludeQual dataName mod str) uq
467 tcQual mod str uq = mkKnownKeyGlobal (mkPreludeQual tcName mod str) uq
468 clsQual mod str uq = mkKnownKeyGlobal (mkPreludeQual clsName mod str) uq
470 varQual_RDR mod str = mkPreludeQual varName mod str
471 dataQual_RDR mod str = mkPreludeQual dataName mod str
474 %************************************************************************
476 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
478 %************************************************************************
481 boundedClassKey = mkPreludeClassUnique 1
482 enumClassKey = mkPreludeClassUnique 2
483 eqClassKey = mkPreludeClassUnique 3
484 floatingClassKey = mkPreludeClassUnique 5
485 fractionalClassKey = mkPreludeClassUnique 6
486 integralClassKey = mkPreludeClassUnique 7
487 monadClassKey = mkPreludeClassUnique 8
488 monadPlusClassKey = mkPreludeClassUnique 9
489 functorClassKey = mkPreludeClassUnique 10
490 numClassKey = mkPreludeClassUnique 11
491 ordClassKey = mkPreludeClassUnique 12
492 readClassKey = mkPreludeClassUnique 13
493 realClassKey = mkPreludeClassUnique 14
494 realFloatClassKey = mkPreludeClassUnique 15
495 realFracClassKey = mkPreludeClassUnique 16
496 showClassKey = mkPreludeClassUnique 17
498 cCallableClassKey = mkPreludeClassUnique 18
499 cReturnableClassKey = mkPreludeClassUnique 19
501 ixClassKey = mkPreludeClassUnique 20
504 %************************************************************************
506 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
508 %************************************************************************
511 addrPrimTyConKey = mkPreludeTyConUnique 1
512 addrTyConKey = mkPreludeTyConUnique 2
513 arrayPrimTyConKey = mkPreludeTyConUnique 3
514 boolTyConKey = mkPreludeTyConUnique 4
515 byteArrayPrimTyConKey = mkPreludeTyConUnique 5
516 charPrimTyConKey = mkPreludeTyConUnique 7
517 charTyConKey = mkPreludeTyConUnique 8
518 doublePrimTyConKey = mkPreludeTyConUnique 9
519 doubleTyConKey = mkPreludeTyConUnique 10
520 floatPrimTyConKey = mkPreludeTyConUnique 11
521 floatTyConKey = mkPreludeTyConUnique 12
522 funTyConKey = mkPreludeTyConUnique 13
523 intPrimTyConKey = mkPreludeTyConUnique 14
524 intTyConKey = mkPreludeTyConUnique 15
525 int8TyConKey = mkPreludeTyConUnique 16
526 int16TyConKey = mkPreludeTyConUnique 17
527 int32TyConKey = mkPreludeTyConUnique 18
528 int64PrimTyConKey = mkPreludeTyConUnique 19
529 int64TyConKey = mkPreludeTyConUnique 20
530 integerTyConKey = mkPreludeTyConUnique 21
531 listTyConKey = mkPreludeTyConUnique 22
532 foreignObjPrimTyConKey = mkPreludeTyConUnique 23
533 foreignObjTyConKey = mkPreludeTyConUnique 24
534 weakPrimTyConKey = mkPreludeTyConUnique 25
535 mutableArrayPrimTyConKey = mkPreludeTyConUnique 26
536 mutableByteArrayPrimTyConKey = mkPreludeTyConUnique 27
537 orderingTyConKey = mkPreludeTyConUnique 28
538 mVarPrimTyConKey = mkPreludeTyConUnique 29
539 ratioTyConKey = mkPreludeTyConUnique 30
540 rationalTyConKey = mkPreludeTyConUnique 31
541 realWorldTyConKey = mkPreludeTyConUnique 32
542 stablePtrPrimTyConKey = mkPreludeTyConUnique 33
543 stablePtrTyConKey = mkPreludeTyConUnique 34
544 statePrimTyConKey = mkPreludeTyConUnique 35
545 stableNamePrimTyConKey = mkPreludeTyConUnique 50
546 stableNameTyConKey = mkPreludeTyConUnique 51
547 mutableByteArrayTyConKey = mkPreludeTyConUnique 52
548 mutVarPrimTyConKey = mkPreludeTyConUnique 53
549 ioTyConKey = mkPreludeTyConUnique 55
550 byteArrayTyConKey = mkPreludeTyConUnique 56
551 wordPrimTyConKey = mkPreludeTyConUnique 57
552 wordTyConKey = mkPreludeTyConUnique 58
553 word8TyConKey = mkPreludeTyConUnique 59
554 word16TyConKey = mkPreludeTyConUnique 60
555 word32TyConKey = mkPreludeTyConUnique 61
556 word64PrimTyConKey = mkPreludeTyConUnique 62
557 word64TyConKey = mkPreludeTyConUnique 63
558 boxedConKey = mkPreludeTyConUnique 64
559 unboxedConKey = mkPreludeTyConUnique 65
560 anyBoxConKey = mkPreludeTyConUnique 66
561 kindConKey = mkPreludeTyConUnique 67
562 boxityConKey = mkPreludeTyConUnique 68
563 typeConKey = mkPreludeTyConUnique 69
564 threadIdPrimTyConKey = mkPreludeTyConUnique 70
565 bcoPrimTyConKey = mkPreludeTyConUnique 71
567 -- Generic Type Constructors
568 crossTyConKey = mkPreludeTyConUnique 72
569 plusTyConKey = mkPreludeTyConUnique 73
570 genUnitTyConKey = mkPreludeTyConUnique 74
573 %************************************************************************
575 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
577 %************************************************************************
580 addrDataConKey = mkPreludeDataConUnique 0
581 charDataConKey = mkPreludeDataConUnique 1
582 consDataConKey = mkPreludeDataConUnique 2
583 doubleDataConKey = mkPreludeDataConUnique 3
584 falseDataConKey = mkPreludeDataConUnique 4
585 floatDataConKey = mkPreludeDataConUnique 5
586 intDataConKey = mkPreludeDataConUnique 6
587 smallIntegerDataConKey = mkPreludeDataConUnique 7
588 largeIntegerDataConKey = mkPreludeDataConUnique 8
589 foreignObjDataConKey = mkPreludeDataConUnique 9
590 nilDataConKey = mkPreludeDataConUnique 10
591 ratioDataConKey = mkPreludeDataConUnique 11
592 stablePtrDataConKey = mkPreludeDataConUnique 12
593 stableNameDataConKey = mkPreludeDataConUnique 13
594 trueDataConKey = mkPreludeDataConUnique 14
595 wordDataConKey = mkPreludeDataConUnique 15
596 ioDataConKey = mkPreludeDataConUnique 16
598 -- Generic data constructors
599 crossDataConKey = mkPreludeDataConUnique 17
600 inlDataConKey = mkPreludeDataConUnique 18
601 inrDataConKey = mkPreludeDataConUnique 19
602 genUnitDataConKey = mkPreludeDataConUnique 20
605 %************************************************************************
607 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
609 %************************************************************************
612 absentErrorIdKey = mkPreludeMiscIdUnique 1
613 appendIdKey = mkPreludeMiscIdUnique 2
614 augmentIdKey = mkPreludeMiscIdUnique 3
615 buildIdKey = mkPreludeMiscIdUnique 4
616 errorIdKey = mkPreludeMiscIdUnique 5
617 foldlIdKey = mkPreludeMiscIdUnique 6
618 foldrIdKey = mkPreludeMiscIdUnique 7
619 recSelErrIdKey = mkPreludeMiscIdUnique 8
620 integerMinusOneIdKey = mkPreludeMiscIdUnique 9
621 integerPlusOneIdKey = mkPreludeMiscIdUnique 10
622 integerPlusTwoIdKey = mkPreludeMiscIdUnique 11
623 integerZeroIdKey = mkPreludeMiscIdUnique 12
624 int2IntegerIdKey = mkPreludeMiscIdUnique 13
625 irrefutPatErrorIdKey = mkPreludeMiscIdUnique 15
626 eqStringIdKey = mkPreludeMiscIdUnique 16
627 noMethodBindingErrorIdKey = mkPreludeMiscIdUnique 17
628 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
629 parErrorIdKey = mkPreludeMiscIdUnique 20
630 parIdKey = mkPreludeMiscIdUnique 21
631 patErrorIdKey = mkPreludeMiscIdUnique 22
632 realWorldPrimIdKey = mkPreludeMiscIdUnique 23
633 recConErrorIdKey = mkPreludeMiscIdUnique 24
634 recUpdErrorIdKey = mkPreludeMiscIdUnique 25
635 traceIdKey = mkPreludeMiscIdUnique 26
636 unpackCStringUtf8IdKey = mkPreludeMiscIdUnique 27
637 unpackCStringAppendIdKey = mkPreludeMiscIdUnique 28
638 unpackCStringFoldrIdKey = mkPreludeMiscIdUnique 29
639 unpackCStringIdKey = mkPreludeMiscIdUnique 30
640 ushowListIdKey = mkPreludeMiscIdUnique 31
641 unsafeCoerceIdKey = mkPreludeMiscIdUnique 32
642 concatIdKey = mkPreludeMiscIdUnique 33
643 filterIdKey = mkPreludeMiscIdUnique 34
644 zipIdKey = mkPreludeMiscIdUnique 35
645 bindIOIdKey = mkPreludeMiscIdUnique 36
646 returnIOIdKey = mkPreludeMiscIdUnique 37
647 deRefStablePtrIdKey = mkPreludeMiscIdUnique 38
648 makeStablePtrIdKey = mkPreludeMiscIdUnique 39
649 getTagIdKey = mkPreludeMiscIdUnique 40
650 plusIntegerIdKey = mkPreludeMiscIdUnique 41
651 timesIntegerIdKey = mkPreludeMiscIdUnique 42
654 Certain class operations from Prelude classes. They get their own
655 uniques so we can look them up easily when we want to conjure them up
656 during type checking.
659 fromIntClassOpKey = mkPreludeMiscIdUnique 101
660 fromIntegerClassOpKey = mkPreludeMiscIdUnique 102
661 minusClassOpKey = mkPreludeMiscIdUnique 103
662 fromRationalClassOpKey = mkPreludeMiscIdUnique 104
663 enumFromClassOpKey = mkPreludeMiscIdUnique 105
664 enumFromThenClassOpKey = mkPreludeMiscIdUnique 106
665 enumFromToClassOpKey = mkPreludeMiscIdUnique 107
666 enumFromThenToClassOpKey = mkPreludeMiscIdUnique 108
667 eqClassOpKey = mkPreludeMiscIdUnique 109
668 geClassOpKey = mkPreludeMiscIdUnique 110
669 failMClassOpKey = mkPreludeMiscIdUnique 112
670 thenMClassOpKey = mkPreludeMiscIdUnique 113 -- (>>=)
671 -- Just a place holder for unbound variables produced by the renamer:
672 unboundKey = mkPreludeMiscIdUnique 114
673 fromEnumClassOpKey = mkPreludeMiscIdUnique 115
675 mainKey = mkPreludeMiscIdUnique 116
676 returnMClassOpKey = mkPreludeMiscIdUnique 117
677 otherwiseIdKey = mkPreludeMiscIdUnique 118
678 toEnumClassOpKey = mkPreludeMiscIdUnique 119
679 mapIdKey = mkPreludeMiscIdUnique 120
683 assertIdKey = mkPreludeMiscIdUnique 121
684 runSTRepIdKey = mkPreludeMiscIdUnique 122
688 %************************************************************************
690 \subsection{Standard groups of types}
692 %************************************************************************
704 -- Renamer always imports these data decls replete with constructors
705 -- so that desugarer can always see their constructors. Ugh!
710 , mutableByteArrayTyConKey
725 %************************************************************************
727 \subsection[Class-std-groups]{Standard groups of Prelude classes}
729 %************************************************************************
731 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
734 @derivingOccurrences@ maps a class name to a list of the (qualified)
735 occurrences that will be mentioned by the derived code for the class
736 when it is later generated. We don't need to put in things that are
737 WiredIn (because they are already mapped to their correct name by the
738 @NameSupply@. The class itself, and all its class ops, is already
739 flagged as an occurrence so we don't need to mention that either.
741 @derivingOccurrences@ has an item for every derivable class, even if
742 that item is empty, because we treat lookup failure as indicating that
743 the class is illegal in a deriving clause.
746 derivingOccurrences :: UniqFM [RdrName]
747 derivingOccurrences = listToUFM deriving_occ_info
749 derivableClassKeys = map fst deriving_occ_info
752 = [ (eqClassKey, [intTyCon_RDR, and_RDR, not_RDR])
753 , (ordClassKey, [intTyCon_RDR, compose_RDR, eqTag_RDR])
754 -- EQ (from Ordering) is needed to force in the constructors
755 -- as well as the type constructor.
756 , (enumClassKey, [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR])
757 -- The last two Enum deps are only used to produce better
758 -- error msgs for derived toEnum methods.
759 , (boundedClassKey, [intTyCon_RDR])
760 , (showClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR,
761 showParen_RDR, showSpace_RDR, showList___RDR])
762 , (readClassKey, [intTyCon_RDR, numClass_RDR, ordClass_RDR, append_RDR,
763 foldr_RDR, build_RDR,
764 -- foldr and build required for list comprehension
766 lex_RDR, readParen_RDR, readList___RDR, thenM_RDR])
767 -- returnM (and the rest of the Monad class decl)
768 -- will be forced in as result of depending
769 -- on thenM. -- SOF 1/99
770 , (ixClassKey, [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR,
771 foldr_RDR, build_RDR,
772 -- foldr and build required for list comprehension used
773 -- with single constructor types -- KSW 2000-06
774 returnM_RDR, failM_RDR])
775 -- the last two are needed to force returnM, thenM and failM
776 -- in before typechecking the list(monad) comprehension
777 -- generated for derived Ix instances (range method)
778 -- of single constructor types. -- SOF 8/97
780 -- intTyCon: Practically any deriving needs Int, either for index calculations,
782 -- ordClass: really it's the methods that are actually used.
783 -- numClass: for Int literals
785 -- these RDR names also have known keys, so we need to get back the RDR names to
786 -- populate the occurrence list above.
787 intTyCon_RDR = nameRdrName intTyConName
788 eq_RDR = nameRdrName eqName
789 ge_RDR = nameRdrName geName
790 numClass_RDR = nameRdrName numClassName
791 ordClass_RDR = nameRdrName ordClassName
792 map_RDR = nameRdrName mapName
793 append_RDR = nameRdrName appendName
794 foldr_RDR = nameRdrName foldrName
795 build_RDR = nameRdrName buildName
796 enumFromTo_RDR = nameRdrName enumFromToName
797 returnM_RDR = nameRdrName returnMName
798 thenM_RDR = nameRdrName thenMName
799 failM_RDR = nameRdrName failMName
803 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
804 even though every numeric class has these two as a superclass,
805 because the list of ambiguous dictionaries hasn't been simplified.
813 ++ fractionalClassKeys
815 fractionalClassKeys =
822 -- the strictness analyser needs to know about numeric types
823 -- (see SaAbsInt.lhs)
824 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
830 , cReturnableClassKey
834 = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
836 -- We have to have "CCallable" and "CReturnable" in the standard
837 -- classes, so that if you go...
839 -- _ccall_ foo ... 93{-numeric literal-} ...
841 -- ... it can do The Right Thing on the 93.
843 noDictClassKeys -- These classes are used only for type annotations;
844 -- they are not implemented by dictionaries, ever.
849 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
850 -- during compiler debugging.
851 mkUnboundName :: RdrName -> Name
852 mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
854 isUnboundName :: Name -> Bool
855 isUnboundName name = name `hasKey` unboundKey