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