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