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