[project @ 2002-09-06 14:00:25 by simonmar]
[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         bcoPrimTyConName,
108         stablePtrTyConName,
109         stablePtrDataConName,
110
111         --  Classes.  *Must* include:
112         --      classes that are grabbed by key (e.g., eqClassKey)
113         --      classes in "Class.standardClassKeys" (quite a few)
114         eqClassName,                    -- mentioned, derivable
115         ordClassName,                   -- derivable
116         boundedClassName,               -- derivable
117         numClassName,                   -- mentioned, numeric
118         enumClassName,                  -- derivable
119         monadClassName,
120         functorClassName,
121         showClassName,                  -- derivable
122         realClassName,                  -- numeric
123         integralClassName,              -- numeric
124         fractionalClassName,            -- numeric
125         floatingClassName,              -- numeric
126         realFracClassName,              -- numeric
127         realFloatClassName,             -- numeric
128         readClassName,                  -- derivable
129         ixClassName,                    -- derivable (but it isn't Prelude.Ix; hmmm)
130         cCallableClassName,             -- mentioned, ccallish
131         cReturnableClassName,           -- mentioned, ccallish
132
133         -- ClassOps 
134         fromIntegerName,
135         negateName,
136         geName,
137         minusName,
138         enumFromName,
139         enumFromThenName,
140         enumFromToName,
141         enumFromThenToName,
142         fromEnumName,
143         toEnumName,
144         eqName,
145         thenMName,
146         bindMName,
147         returnMName,
148         failMName,
149         fromRationalName,
150
151         -- not class methods, but overloaded (for parallel arrays)
152         enumFromToPName,
153         enumFromThenToPName,
154
155         deRefStablePtrName,
156         newStablePtrName,
157         bindIOName,
158         thenIOName,
159         returnIOName,
160         failIOName,
161
162         -- Strings and lists
163         mapName,
164         appendName,
165         unpackCStringName,
166         unpackCStringAppendName,
167         unpackCStringFoldrName,
168         unpackCStringUtf8Name,
169
170         -- List operations
171         concatName,
172         filterName,
173         zipName,
174         foldrName,
175         buildName,
176         augmentName,
177
178         -- Parallel array operations
179         nullPName,
180         lengthPName,
181         replicatePName,
182         mapPName,
183         filterPName,
184         zipPName,
185         crossPName,
186         indexPName,
187         toPName,
188         bpermutePName,
189         bpermuteDftPName,
190         indexOfPName,
191
192         -- FFI primitive types that are not wired-in.
193         int8TyConName,
194         int16TyConName,
195         int32TyConName,
196         int64TyConName,
197         word8TyConName,
198         word16TyConName,
199         word32TyConName,
200         word64TyConName,
201
202         -- Others
203         unsafeCoerceName,
204         otherwiseIdName,
205         plusIntegerName,
206         timesIntegerName,
207         eqStringName,
208         assertName,
209         runSTRepName,
210         printName,
211         splitName, fstName, sndName,    -- Used by splittery
212
213         -- Others (needed for flattening and not mentioned before)
214         andName,
215         orName
216     ]
217
218 monadNames :: [Name]    -- The monad ops need by a HsDo
219 monadNames = [returnMName, failMName, bindMName, thenMName]
220 \end{code}
221
222
223 %************************************************************************
224 %*                                                                      *
225 \subsection{Module names}
226 %*                                                                      *
227 %************************************************************************
228
229 \begin{code}
230 pRELUDE_Name      = mkModuleName "Prelude"
231 gHC_PRIM_Name     = mkModuleName "GHC.Prim"        -- Primitive types and values
232 pREL_BASE_Name    = mkModuleName "GHC.Base"
233 pREL_ENUM_Name    = mkModuleName "GHC.Enum"
234 pREL_SHOW_Name    = mkModuleName "GHC.Show"
235 pREL_READ_Name    = mkModuleName "GHC.Read"
236 pREL_NUM_Name     = mkModuleName "GHC.Num"
237 pREL_LIST_Name    = mkModuleName "GHC.List"
238 pREL_PARR_Name    = mkModuleName "GHC.PArr"
239 pREL_TUP_Name     = mkModuleName "Data.Tuple"
240 pREL_PACK_Name    = mkModuleName "GHC.Pack"
241 pREL_CONC_Name    = mkModuleName "GHC.Conc"
242 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
243 pREL_ST_Name      = mkModuleName "GHC.ST"
244 pREL_ARR_Name     = mkModuleName "GHC.Arr"
245 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
246 pREL_STABLE_Name  = mkModuleName "GHC.Stable"
247 pREL_ADDR_Name    = mkModuleName "GHC.Addr"
248 pREL_PTR_Name     = mkModuleName "GHC.Ptr"
249 pREL_ERR_Name     = mkModuleName "GHC.Err"
250 pREL_REAL_Name    = mkModuleName "GHC.Real"
251 pREL_FLOAT_Name   = mkModuleName "GHC.Float"
252 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
253 sYSTEM_IO_Name    = mkModuleName "System.IO"
254
255 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
256 lEX_Name       = mkModuleName "Text.Read.Lex"
257
258 mAIN_Name         = mkModuleName "Main"
259 pREL_INT_Name     = mkModuleName "GHC.Int"
260 pREL_WORD_Name    = mkModuleName "GHC.Word"
261
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, mkFastString "(,)")   -- not strictly necessary
294 mkTupNameStr Boxed 3 = (pREL_TUP_Name, mkFastString "(,,)")  -- ditto
295 mkTupNameStr Boxed 4 = (pREL_TUP_Name, mkFastString "(,,,)") -- ditto
296 mkTupNameStr Boxed n = (pREL_TUP_Name, mkFastString ("(" ++ nOfThem (n-1) ',' ++ ")"))
297
298 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
299 mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, mkFastString "(# #)") -- 1 and 0 both make sense!!!
300 mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, mkFastString "(#,#)")
301 mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, mkFastString "(#,,#)")
302 mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, mkFastString "(#,,,#)")
303 mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ 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 runIOName      = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") 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 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
556 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
557 deRefStablePtrName    = varQual  pREL_STABLE_Name FSLIT("deRefStablePtr") deRefStablePtrIdKey
558 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
559
560 assertName         = varQual gHC_PRIM_Name FSLIT("assert") assertIdKey
561 getTagName         = varQual gHC_PRIM_Name FSLIT("getTag#") getTagIdKey
562
563 errorName          = varQual pREL_ERR_Name FSLIT("error") errorIdKey
564 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
565
566 -- The "split" Id for splittable implicit parameters
567 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
568 \end{code}
569
570 %************************************************************************
571 %*                                                                      *
572 \subsection{Known names}
573 %*                                                                      *
574 %************************************************************************
575
576 The following names are known to the compiler, but they don't require
577 pre-assigned keys.  Mostly these names are used in generating deriving
578 code, which is passed through the renamer anyway.
579
580         THEY ARE ALL ORIGINAL NAMES, HOWEVER
581
582 \begin{code}
583 -- Lists and tuples
584 tupleCon_RDR, tupleTyCon_RDR            :: Int -> RdrName
585 ubxTupleCon_RDR, ubxTupleTyCon_RDR      :: Int -> RdrName
586
587 tupleCon_RDR      = mkTupConRdrName dataName Boxed  
588 tupleTyCon_RDR    = mkTupConRdrName tcName   Boxed  
589 ubxTupleCon_RDR   = mkTupConRdrName dataName Unboxed
590 ubxTupleTyCon_RDR = mkTupConRdrName tcName   Unboxed
591
592 unitCon_RDR       = dataQual_RDR pREL_BASE_Name FSLIT("()")
593 unitTyCon_RDR     = tcQual_RDR   pREL_BASE_Name FSLIT("()")
594
595 and_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("&&")
596 not_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("not")
597 compose_RDR        = varQual_RDR  pREL_BASE_Name FSLIT(".")
598 ne_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("/=")
599 le_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("<=")
600 lt_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("<")
601 gt_RDR             = varQual_RDR  pREL_BASE_Name FSLIT(">")
602 ltTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("LT")
603 eqTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
604 gtTag_RDR          = dataQual_RDR pREL_BASE_Name FSLIT("GT")
605 max_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("max")
606 min_RDR            = varQual_RDR  pREL_BASE_Name FSLIT("min")
607 compare_RDR        = varQual_RDR  pREL_BASE_Name FSLIT("compare")
608 showList_RDR       = varQual_RDR  pREL_SHOW_Name FSLIT("showList")
609 showList___RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showList__")
610 showsPrec_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showsPrec")
611 showSpace_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showSpace")
612 showString_RDR     = varQual_RDR  pREL_SHOW_Name FSLIT("showString")
613 showParen_RDR      = varQual_RDR  pREL_SHOW_Name FSLIT("showParen")
614
615 readsPrec_RDR      = varQual_RDR  pREL_READ_Name FSLIT("readsPrec")
616 readPrec_RDR       = varQual_RDR  pREL_READ_Name FSLIT("readPrec")
617 readListPrec_RDR   = varQual_RDR  pREL_READ_Name FSLIT("readListPrec")
618 readList_RDR       = varQual_RDR  pREL_READ_Name FSLIT("readList")
619
620 readListDefault_RDR     = varQual_RDR  pREL_READ_Name FSLIT("readListDefault")
621 readListPrecDefault_RDR = varQual_RDR  pREL_READ_Name FSLIT("readListPrecDefault")
622 parens_RDR              = varQual_RDR  pREL_READ_Name FSLIT("parens")
623 choose_RDR              = varQual_RDR  pREL_READ_Name FSLIT("choose")
624 lexP_RDR                = varQual_RDR  pREL_READ_Name FSLIT("lexP")
625
626 -- Module ReadPrec
627 step_RDR           = varQual_RDR  rEAD_PREC_Name FSLIT("step")
628 reset_RDR          = varQual_RDR  rEAD_PREC_Name FSLIT("reset")
629 alt_RDR            = varQual_RDR  rEAD_PREC_Name FSLIT("+++")
630 prec_RDR           = varQual_RDR  rEAD_PREC_Name FSLIT("prec")
631
632 -- Module Lex
633 symbol_RDR         = dataQual_RDR  lEX_Name FSLIT("Symbol")
634 ident_RDR          = dataQual_RDR  lEX_Name FSLIT("Ident")
635 punc_RDR           = dataQual_RDR  lEX_Name FSLIT("Punc")
636
637 times_RDR          = varQual_RDR  pREL_NUM_Name FSLIT("*")
638 plus_RDR           = varQual_RDR  pREL_NUM_Name FSLIT("+")
639 negate_RDR         = varQual_RDR  pREL_NUM_Name FSLIT("negate")
640 range_RDR          = varQual_RDR  pREL_ARR_Name FSLIT("range")
641 index_RDR          = varQual_RDR  pREL_ARR_Name FSLIT("index")
642 inRange_RDR        = varQual_RDR  pREL_ARR_Name FSLIT("inRange")
643 succ_RDR           = varQual_RDR  pREL_ENUM_Name FSLIT("succ")
644 pred_RDR           = varQual_RDR  pREL_ENUM_Name FSLIT("pred")
645 minBound_RDR       = varQual_RDR  pREL_ENUM_Name FSLIT("minBound")
646 maxBound_RDR       = varQual_RDR  pREL_ENUM_Name FSLIT("maxBound")
647 assertErr_RDR      = varQual_RDR  pREL_ERR_Name FSLIT("assertError")
648 \end{code}
649
650 These RDR names also have known keys, so we need to get back the RDR names to
651 populate the occurrence list above.
652
653 \begin{code}
654 funTyCon_RDR            = nameRdrName funTyConName
655 nilCon_RDR              = nameRdrName nilDataConName
656 listTyCon_RDR           = nameRdrName listTyConName
657 parrTyCon_RDR           = nameRdrName parrTyConName
658 ioTyCon_RDR             = nameRdrName ioTyConName
659 intTyCon_RDR            = nameRdrName intTyConName
660 eq_RDR                  = nameRdrName eqName
661 ge_RDR                  = nameRdrName geName
662 numClass_RDR            = nameRdrName numClassName
663 ordClass_RDR            = nameRdrName ordClassName
664 map_RDR                 = nameRdrName mapName
665 append_RDR              = nameRdrName appendName
666 foldr_RDR               = nameRdrName foldrName
667 build_RDR               = nameRdrName buildName
668 enumFromTo_RDR          = nameRdrName enumFromToName
669 returnM_RDR             = nameRdrName returnMName
670 bindM_RDR               = nameRdrName bindMName
671 failM_RDR               = nameRdrName failMName
672 false_RDR               = nameRdrName falseDataConName
673 true_RDR                = nameRdrName trueDataConName
674 error_RDR               = nameRdrName errorName
675 getTag_RDR              = nameRdrName getTagName
676 fromEnum_RDR            = nameRdrName fromEnumName
677 toEnum_RDR              = nameRdrName toEnumName
678 enumFrom_RDR            = nameRdrName enumFromName
679 mkInt_RDR               = nameRdrName intDataConName
680 enumFromThen_RDR        = nameRdrName enumFromThenName
681 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
682 ratioDataCon_RDR        = nameRdrName ratioDataConName
683 plusInteger_RDR         = nameRdrName plusIntegerName
684 timesInteger_RDR        = nameRdrName timesIntegerName
685 enumClass_RDR           = nameRdrName enumClassName
686 monadClass_RDR          = nameRdrName monadClassName
687 ioDataCon_RDR           = nameRdrName ioDataConName
688 cCallableClass_RDR      = nameRdrName cCallableClassName
689 cReturnableClass_RDR    = nameRdrName cReturnableClassName
690 eqClass_RDR             = nameRdrName eqClassName
691 eqString_RDR            = nameRdrName eqStringName
692 unpackCString_RDR       = nameRdrName unpackCStringName
693 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
694 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
695 deRefStablePtr_RDR      = nameRdrName deRefStablePtrName
696 newStablePtr_RDR        = nameRdrName newStablePtrName
697 bindIO_RDR              = nameRdrName bindIOName
698 returnIO_RDR            = nameRdrName returnIOName
699 fromInteger_RDR         = nameRdrName fromIntegerName
700 fromRational_RDR        = nameRdrName fromRationalName
701 minus_RDR               = nameRdrName minusName
702 \end{code}
703
704 %************************************************************************
705 %*                                                                      *
706 \subsection{Local helpers}
707 %*                                                                      *
708 %************************************************************************
709
710 All these are original names; hence mkOrig
711
712 \begin{code}
713 varQual  mod str uq = mkKnownKeyExternalName (varQual_RDR  mod str) uq
714 dataQual mod str uq = mkKnownKeyExternalName (dataQual_RDR mod str) uq
715 tcQual   mod str uq = mkKnownKeyExternalName (tcQual_RDR   mod str) uq
716 clsQual  mod str uq = mkKnownKeyExternalName (clsQual_RDR  mod str) uq
717
718 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) builtinSrcLoc
719         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
720         -- And they don't come from any particular module; indeed we always
721         -- want to print them unqualified.  Hence the LocalName
722
723 varQual_RDR  mod str = mkOrig varName  mod str
724 tcQual_RDR   mod str = mkOrig tcName   mod str
725 clsQual_RDR  mod str = mkOrig clsName  mod str
726 dataQual_RDR mod str = mkOrig dataName mod str
727 \end{code}
728
729 %************************************************************************
730 %*                                                                      *
731 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
732 %*                                                                      *
733 %************************************************************************
734
735 \begin{code}
736 boundedClassKey         = mkPreludeClassUnique 1 
737 enumClassKey            = mkPreludeClassUnique 2 
738 eqClassKey              = mkPreludeClassUnique 3 
739 floatingClassKey        = mkPreludeClassUnique 5 
740 fractionalClassKey      = mkPreludeClassUnique 6 
741 integralClassKey        = mkPreludeClassUnique 7 
742 monadClassKey           = mkPreludeClassUnique 8 
743 functorClassKey         = mkPreludeClassUnique 10
744 numClassKey             = mkPreludeClassUnique 11
745 ordClassKey             = mkPreludeClassUnique 12
746 readClassKey            = mkPreludeClassUnique 13
747 realClassKey            = mkPreludeClassUnique 14
748 realFloatClassKey       = mkPreludeClassUnique 15
749 realFracClassKey        = mkPreludeClassUnique 16
750 showClassKey            = mkPreludeClassUnique 17
751
752 cCallableClassKey       = mkPreludeClassUnique 18
753 cReturnableClassKey     = mkPreludeClassUnique 19
754
755 ixClassKey              = mkPreludeClassUnique 20
756 \end{code}
757
758 %************************************************************************
759 %*                                                                      *
760 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
761 %*                                                                      *
762 %************************************************************************
763
764 \begin{code}
765 addrPrimTyConKey                        = mkPreludeTyConUnique  1
766 addrTyConKey                            = mkPreludeTyConUnique  2
767 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
768 boolTyConKey                            = mkPreludeTyConUnique  4
769 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
770 charPrimTyConKey                        = mkPreludeTyConUnique  7
771 charTyConKey                            = mkPreludeTyConUnique  8
772 doublePrimTyConKey                      = mkPreludeTyConUnique  9
773 doubleTyConKey                          = mkPreludeTyConUnique 10 
774 floatPrimTyConKey                       = mkPreludeTyConUnique 11
775 floatTyConKey                           = mkPreludeTyConUnique 12
776 funTyConKey                             = mkPreludeTyConUnique 13
777 intPrimTyConKey                         = mkPreludeTyConUnique 14
778 intTyConKey                             = mkPreludeTyConUnique 15
779 int8TyConKey                            = mkPreludeTyConUnique 16
780 int16TyConKey                           = mkPreludeTyConUnique 17
781 int32PrimTyConKey                       = mkPreludeTyConUnique 18
782 int32TyConKey                           = mkPreludeTyConUnique 19
783 int64PrimTyConKey                       = mkPreludeTyConUnique 20
784 int64TyConKey                           = mkPreludeTyConUnique 21
785 integerTyConKey                         = mkPreludeTyConUnique 22
786 listTyConKey                            = mkPreludeTyConUnique 23
787 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
788 weakPrimTyConKey                        = mkPreludeTyConUnique 27
789 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
790 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
791 orderingTyConKey                        = mkPreludeTyConUnique 30
792 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
793 ratioTyConKey                           = mkPreludeTyConUnique 32
794 rationalTyConKey                        = mkPreludeTyConUnique 33
795 realWorldTyConKey                       = mkPreludeTyConUnique 34
796 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
797 stablePtrTyConKey                       = mkPreludeTyConUnique 36
798 statePrimTyConKey                       = mkPreludeTyConUnique 50
799 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
800 stableNameTyConKey                      = mkPreludeTyConUnique 52
801 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
802 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
803 ioTyConKey                              = mkPreludeTyConUnique 56
804 byteArrayTyConKey                       = mkPreludeTyConUnique 57
805 wordPrimTyConKey                        = mkPreludeTyConUnique 58
806 wordTyConKey                            = mkPreludeTyConUnique 59
807 word8TyConKey                           = mkPreludeTyConUnique 60
808 word16TyConKey                          = mkPreludeTyConUnique 61 
809 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
810 word32TyConKey                          = mkPreludeTyConUnique 63
811 word64PrimTyConKey                      = mkPreludeTyConUnique 64
812 word64TyConKey                          = mkPreludeTyConUnique 65
813 liftedConKey                            = mkPreludeTyConUnique 66
814 unliftedConKey                          = mkPreludeTyConUnique 67
815 anyBoxConKey                            = mkPreludeTyConUnique 68
816 kindConKey                              = mkPreludeTyConUnique 69
817 boxityConKey                            = mkPreludeTyConUnique 70
818 typeConKey                              = mkPreludeTyConUnique 71
819 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
820 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
821 ptrTyConKey                             = mkPreludeTyConUnique 74
822 funPtrTyConKey                          = mkPreludeTyConUnique 75
823
824 -- Usage type constructors
825 usageConKey                             = mkPreludeTyConUnique 76
826 usOnceTyConKey                          = mkPreludeTyConUnique 77
827 usManyTyConKey                          = mkPreludeTyConUnique 78
828
829 -- Generic Type Constructors
830 crossTyConKey                           = mkPreludeTyConUnique 79
831 plusTyConKey                            = mkPreludeTyConUnique 80
832 genUnitTyConKey                         = mkPreludeTyConUnique 81
833
834 -- Parallel array type constructor
835 parrTyConKey                            = mkPreludeTyConUnique 82
836
837 unitTyConKey = mkTupleTyConUnique Boxed 0
838 \end{code}
839
840 %************************************************************************
841 %*                                                                      *
842 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
843 %*                                                                      *
844 %************************************************************************
845
846 \begin{code}
847 addrDataConKey                          = mkPreludeDataConUnique  0
848 charDataConKey                          = mkPreludeDataConUnique  1
849 consDataConKey                          = mkPreludeDataConUnique  2
850 doubleDataConKey                        = mkPreludeDataConUnique  3
851 falseDataConKey                         = mkPreludeDataConUnique  4
852 floatDataConKey                         = mkPreludeDataConUnique  5
853 intDataConKey                           = mkPreludeDataConUnique  6
854 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
855 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
856 nilDataConKey                           = mkPreludeDataConUnique 11
857 ratioDataConKey                         = mkPreludeDataConUnique 12
858 stablePtrDataConKey                     = mkPreludeDataConUnique 13
859 stableNameDataConKey                    = mkPreludeDataConUnique 14
860 trueDataConKey                          = mkPreludeDataConUnique 15
861 wordDataConKey                          = mkPreludeDataConUnique 16
862 ioDataConKey                            = mkPreludeDataConUnique 17
863 ptrDataConKey                           = mkPreludeDataConUnique 18
864 funPtrDataConKey                        = mkPreludeDataConUnique 19
865
866 -- Generic data constructors
867 crossDataConKey                         = mkPreludeDataConUnique 20
868 inlDataConKey                           = mkPreludeDataConUnique 21
869 inrDataConKey                           = mkPreludeDataConUnique 22
870 genUnitDataConKey                       = mkPreludeDataConUnique 23
871
872 -- Data constructor for parallel arrays
873 parrDataConKey                          = mkPreludeDataConUnique 24
874 \end{code}
875
876 %************************************************************************
877 %*                                                                      *
878 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
879 %*                                                                      *
880 %************************************************************************
881
882 \begin{code}
883 absentErrorIdKey              = mkPreludeMiscIdUnique  1
884 appendIdKey                   = mkPreludeMiscIdUnique  2
885 augmentIdKey                  = mkPreludeMiscIdUnique  3
886 buildIdKey                    = mkPreludeMiscIdUnique  4
887 errorIdKey                    = mkPreludeMiscIdUnique  5
888 foldlIdKey                    = mkPreludeMiscIdUnique  6
889 foldrIdKey                    = mkPreludeMiscIdUnique  7
890 recSelErrIdKey                = mkPreludeMiscIdUnique  8
891 integerMinusOneIdKey          = mkPreludeMiscIdUnique  9
892 integerPlusOneIdKey           = mkPreludeMiscIdUnique 10
893 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 11
894 integerZeroIdKey              = mkPreludeMiscIdUnique 12
895 int2IntegerIdKey              = mkPreludeMiscIdUnique 13
896 seqIdKey                      = mkPreludeMiscIdUnique 14
897 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 15
898 eqStringIdKey                 = mkPreludeMiscIdUnique 16
899 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
900 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
901 runtimeErrorIdKey             = mkPreludeMiscIdUnique 19 
902 parErrorIdKey                 = mkPreludeMiscIdUnique 20
903 parIdKey                      = mkPreludeMiscIdUnique 21
904 patErrorIdKey                 = mkPreludeMiscIdUnique 22
905 realWorldPrimIdKey            = mkPreludeMiscIdUnique 23
906 recConErrorIdKey              = mkPreludeMiscIdUnique 24
907 recUpdErrorIdKey              = mkPreludeMiscIdUnique 25
908 traceIdKey                    = mkPreludeMiscIdUnique 26
909 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 27
910 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 28
911 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 29
912 unpackCStringIdKey            = mkPreludeMiscIdUnique 30
913 ushowListIdKey                = mkPreludeMiscIdUnique 31
914 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
915 concatIdKey                   = mkPreludeMiscIdUnique 33
916 filterIdKey                   = mkPreludeMiscIdUnique 34
917 zipIdKey                      = mkPreludeMiscIdUnique 35
918 bindIOIdKey                   = mkPreludeMiscIdUnique 36
919 returnIOIdKey                 = mkPreludeMiscIdUnique 37
920 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
921 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
922 getTagIdKey                   = mkPreludeMiscIdUnique 40
923 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
924 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
925 printIdKey                    = mkPreludeMiscIdUnique 43
926 failIOIdKey                   = mkPreludeMiscIdUnique 44
927 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
928 voidArgIdKey                  = mkPreludeMiscIdUnique 47
929 splitIdKey                    = mkPreludeMiscIdUnique 48
930 fstIdKey                      = mkPreludeMiscIdUnique 49
931 sndIdKey                      = mkPreludeMiscIdUnique 50
932 otherwiseIdKey                = mkPreludeMiscIdUnique 51
933 mapIdKey                      = mkPreludeMiscIdUnique 52
934 assertIdKey                   = mkPreludeMiscIdUnique 53
935 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
936
937 dollarMainKey                 = mkPreludeMiscIdUnique 55
938 runMainKey                    = mkPreludeMiscIdUnique 56
939
940 andIdKey                      = mkPreludeMiscIdUnique 57
941 orIdKey                       = mkPreludeMiscIdUnique 58
942 thenIOIdKey                   = mkPreludeMiscIdUnique 59
943 lazyIdKey                     = mkPreludeMiscIdUnique 60
944
945 -- Parallel array functions
946 nullPIdKey                    = mkPreludeMiscIdUnique 70
947 lengthPIdKey                  = mkPreludeMiscIdUnique 71
948 replicatePIdKey               = mkPreludeMiscIdUnique 72
949 mapPIdKey                     = mkPreludeMiscIdUnique 73
950 filterPIdKey                  = mkPreludeMiscIdUnique 74
951 zipPIdKey                     = mkPreludeMiscIdUnique 75
952 crossPIdKey                   = mkPreludeMiscIdUnique 76
953 indexPIdKey                   = mkPreludeMiscIdUnique 77
954 toPIdKey                      = mkPreludeMiscIdUnique 78
955 enumFromToPIdKey              = mkPreludeMiscIdUnique 79
956 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 80
957 bpermutePIdKey                = mkPreludeMiscIdUnique 81
958 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 82
959 indexOfPIdKey                 = mkPreludeMiscIdUnique 83
960 \end{code}
961
962 Certain class operations from Prelude classes.  They get their own
963 uniques so we can look them up easily when we want to conjure them up
964 during type checking.
965
966 \begin{code}
967         -- Just a place holder for  unbound variables  produced by the renamer:
968 unboundKey                    = mkPreludeMiscIdUnique 101 
969 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
970 minusClassOpKey               = mkPreludeMiscIdUnique 103
971 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
972 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
973 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
974 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
975 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
976 eqClassOpKey                  = mkPreludeMiscIdUnique 109
977 geClassOpKey                  = mkPreludeMiscIdUnique 110
978 negateClassOpKey              = mkPreludeMiscIdUnique 111
979 failMClassOpKey               = mkPreludeMiscIdUnique 112
980 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
981 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
982 fromEnumClassOpKey            = mkPreludeMiscIdUnique 115
983 returnMClassOpKey             = mkPreludeMiscIdUnique 117
984 toEnumClassOpKey              = mkPreludeMiscIdUnique 119
985 \end{code}
986
987
988 %************************************************************************
989 %*                                                                      *
990 \subsection{Standard groups of types}
991 %*                                                                      *
992 %************************************************************************
993
994 \begin{code}
995 numericTyKeys = 
996         [ addrTyConKey
997         , wordTyConKey
998         , intTyConKey
999         , integerTyConKey
1000         , doubleTyConKey
1001         , floatTyConKey
1002         ]
1003
1004         -- Renamer always imports these data decls replete with constructors
1005         -- so that desugarer can always see their constructors.  Ugh!
1006 cCallishTyKeys = 
1007         [ addrTyConKey
1008         , wordTyConKey
1009         , byteArrayTyConKey
1010         , mutableByteArrayTyConKey
1011         , stablePtrTyConKey
1012         , int8TyConKey
1013         , int16TyConKey
1014         , int32TyConKey
1015         , int64TyConKey
1016         , word8TyConKey
1017         , word16TyConKey
1018         , word32TyConKey
1019         , word64TyConKey
1020         ]
1021 \end{code}
1022
1023
1024 %************************************************************************
1025 %*                                                                      *
1026 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1027 %*                                                                      *
1028 %************************************************************************
1029
1030 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1031 (@TcDeriv@).
1032
1033 @derivingOccurrences@ maps a class name to a list of the (qualified)
1034 occurrences that will be mentioned by the derived code for the class
1035 when it is later generated.  We don't need to put in things that are
1036 WiredIn (because they are already mapped to their correct name by the
1037 @NameSupply@.  The class itself, and all its class ops, is already
1038 flagged as an occurrence so we don't need to mention that either.
1039
1040 @derivingOccurrences@ has an item for every derivable class, even if
1041 that item is empty, because we treat lookup failure as indicating that
1042 the class is illegal in a deriving clause.
1043
1044 \begin{code}
1045 derivingOccurrences :: UniqFM [RdrName]
1046 derivingOccurrences = listToUFM deriving_occ_info
1047
1048 derivableClassKeys  = map fst deriving_occ_info
1049
1050 deriving_occ_info
1051   = [ (eqClassKey,      [intTyCon_RDR, and_RDR, not_RDR])
1052     , (ordClassKey,     [intTyCon_RDR, compose_RDR, eqTag_RDR, error_RDR])
1053                                 -- EQ (from Ordering) is needed to force in the constructors
1054                                 -- as well as the type constructor.
1055     , (enumClassKey,    [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, 
1056                          error_RDR, showsPrec_RDR, append_RDR]) 
1057                                 -- The last two Enum deps are only used to produce better
1058                                 -- error msgs for derived toEnum methods.
1059     , (boundedClassKey, [intTyCon_RDR])
1060     , (showClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR, compose_RDR, showString_RDR, 
1061                          showParen_RDR, showSpace_RDR, showList___RDR])
1062     , (readClassKey,    [intTyCon_RDR, numClass_RDR, ordClass_RDR,
1063                          lexP_RDR, readPrec_RDR, 
1064                          readListDefault_RDR, readListPrecDefault_RDR,
1065                          step_RDR, parens_RDR, reset_RDR, prec_RDR, alt_RDR, choose_RDR,
1066                          ident_RDR,     -- Pulls in the entire Lex.Lexeme data type
1067                          bindM_RDR      -- Pulls in the entire Monad class decl
1068                         ] )
1069     , (ixClassKey,      [intTyCon_RDR, numClass_RDR, and_RDR, map_RDR, enumFromTo_RDR, error_RDR,
1070                          foldr_RDR, build_RDR, 
1071                              -- foldr and build required for list comprehension used
1072                              -- with single constructor types  -- KSW 2000-06
1073                          returnM_RDR, failM_RDR])
1074                              -- the last two are needed to force returnM, thenM and failM
1075                              -- in before typechecking the list(monad) comprehension
1076                              -- generated for derived Ix instances (range method)
1077                              -- of single constructor types.  -- SOF 8/97
1078     ]
1079         -- intTyCon: Practically any deriving needs Int, either for index calculations, 
1080         --              or for taggery.
1081         -- ordClass: really it's the methods that are actually used.
1082         -- numClass: for Int literals
1083 \end{code}
1084
1085
1086 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1087 even though every numeric class has these two as a superclass,
1088 because the list of ambiguous dictionaries hasn't been simplified.
1089
1090 \begin{code}
1091 numericClassKeys =
1092         [ numClassKey
1093         , realClassKey
1094         , integralClassKey
1095         ]
1096         ++ fractionalClassKeys
1097
1098 fractionalClassKeys = 
1099         [ fractionalClassKey
1100         , floatingClassKey
1101         , realFracClassKey
1102         , realFloatClassKey
1103         ]
1104
1105         -- the strictness analyser needs to know about numeric types
1106         -- (see SaAbsInt.lhs)
1107 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1108         [ readClassKey
1109         ]
1110
1111 cCallishClassKeys = 
1112         [ cCallableClassKey
1113         , cReturnableClassKey
1114         ]
1115
1116 standardClassKeys
1117   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1118     --
1119     -- We have to have "CCallable" and "CReturnable" in the standard
1120     -- classes, so that if you go...
1121     --
1122     --      _ccall_ foo ... 93{-numeric literal-} ...
1123     --
1124     -- ... it can do The Right Thing on the 93.
1125
1126 noDictClassKeys         -- These classes are used only for type annotations;
1127                         -- they are not implemented by dictionaries, ever.
1128   = cCallishClassKeys
1129 \end{code}
1130