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