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