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