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