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