01e98f7eb9ca729448873d6215321cf967d9f0a3
[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         dataClassName, 
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 gENERICS_Name     = mkModuleName "Data.Generics"
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 constr_RDR  = dataQual_RDR gENERICS_Name FSLIT("Constr")
431 gfoldl_RDR  = varQual_RDR gENERICS_Name FSLIT("gfoldl")
432 gfoldr_RDR  = varQual_RDR gENERICS_Name FSLIT("gfoldr")
433 gunfold_RDR = varQual_RDR gENERICS_Name FSLIT("gunfold")
434 gmapT_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapT")
435 gmapQ_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapQ")
436 gmapM_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapM")
437 conOf_RDR   = varQual_RDR gENERICS_Name FSLIT("conOf")
438 consOf_RDR  = varQual_RDR gENERICS_Name FSLIT("consOf")
439
440 undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined")
441 \end{code}
442
443
444 %************************************************************************
445 %*                                                                      *
446 \subsection{Known-key names}
447 %*                                                                      *
448 %************************************************************************
449
450 Many of these Names are not really "built in", but some parts of the
451 compiler (notably the deriving mechanism) need to mention their names,
452 and it's convenient to write them all down in one place.
453
454 --MetaHaskell Extension  add the constrs and the lower case case
455 -- guys as well (perhaps) e.g. see  trueDataConName     below
456
457
458 \begin{code}
459 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
460 runIOName      = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey
461
462 -- Stuff from GHC.Prim
463 superKindName    = kindQual FSLIT("KX") kindConKey
464 superBoxityName  = kindQual FSLIT("BX") boxityConKey
465 liftedConName    = kindQual FSLIT("*") liftedConKey
466 unliftedConName  = kindQual FSLIT("#") unliftedConKey
467 openKindConName  = kindQual FSLIT("?") anyBoxConKey
468 typeConName      = kindQual FSLIT("Type") typeConKey
469
470 funTyConName                  = tcQual  gHC_PRIM_Name FSLIT("(->)")  funTyConKey
471 charPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey 
472 intPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey 
473 int32PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey 
474 int64PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey 
475 wordPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey 
476 word32PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey 
477 word64PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey 
478 addrPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey 
479 floatPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey 
480 doublePrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey 
481 statePrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("State#") statePrimTyConKey 
482 realWorldTyConName            = tcQual  gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey 
483 arrayPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey 
484 byteArrayPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey 
485 mutableArrayPrimTyConName     = tcQual  gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey 
486 mutableByteArrayPrimTyConName = tcQual  gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
487 mutVarPrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey 
488 mVarPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey 
489 stablePtrPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey 
490 stableNamePrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey 
491 foreignObjPrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey 
492 bcoPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey 
493 weakPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey 
494 threadIdPrimTyConName         = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
495 cCallableClassName            = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
496 cReturnableClassName          = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
497
498 unsafeCoerceName = wVarQual gHC_PRIM_Name FSLIT("unsafeCoerce#") unsafeCoerceIdKey 
499 nullAddrName     = wVarQual gHC_PRIM_Name FSLIT("nullAddr#")    nullAddrIdKey
500 seqName          = wVarQual gHC_PRIM_Name FSLIT("seq")          seqIdKey
501 realWorldName    = wVarQual gHC_PRIM_Name FSLIT("realWorld#")   realWorldPrimIdKey
502
503 -- PrelBase data types and constructors
504 charTyConName     = wTcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
505 charDataConName   = wDataQual pREL_BASE_Name FSLIT("C#") charDataConKey
506 intTyConName      = wTcQual   pREL_BASE_Name FSLIT("Int") intTyConKey
507 intDataConName    = wDataQual pREL_BASE_Name FSLIT("I#") intDataConKey
508 orderingTyConName = tcQual   pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
509 boolTyConName     = wTcQual   pREL_BASE_Name FSLIT("Bool") boolTyConKey
510 falseDataConName  = wDataQual pREL_BASE_Name FSLIT("False") falseDataConKey
511 trueDataConName   = wDataQual pREL_BASE_Name FSLIT("True") trueDataConKey
512 listTyConName     = wTcQual   pREL_BASE_Name FSLIT("[]") listTyConKey
513 nilDataConName    = wDataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
514 consDataConName   = wDataQual pREL_BASE_Name FSLIT(":") consDataConKey
515 eqName            = varQual  pREL_BASE_Name FSLIT("==") eqClassOpKey
516 geName            = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
517
518 -- Generics
519 crossTyConName     = tcQual   pREL_BASE_Name FSLIT(":*:") crossTyConKey
520 crossDataConName   = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
521 plusTyConName      = wTcQual   pREL_BASE_Name FSLIT(":+:") plusTyConKey
522 inlDataConName     = wDataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
523 inrDataConName     = wDataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
524 genUnitTyConName   = wTcQual   pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
525 genUnitDataConName = wDataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
526
527 -- Base strings Strings
528 unpackCStringName       = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
529 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
530 unpackCStringFoldrName  = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
531 unpackCStringUtf8Name   = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
532 eqStringName            = varQual pREL_BASE_Name FSLIT("eqString")  eqStringIdKey
533
534 -- Base classes (Eq, Ord, Functor)
535 eqClassName       = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
536 functorClassName  = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
537 ordClassName      = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
538
539 -- Class Monad
540 monadClassName     = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
541 thenMName          = varQual pREL_BASE_Name FSLIT(">>")  thenMClassOpKey
542 bindMName          = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey
543 returnMName        = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
544 failMName          = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
545
546
547 -- Random PrelBase functions
548 otherwiseIdName   = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
549 foldrName         = varQual pREL_BASE_Name FSLIT("foldr")     foldrIdKey
550 buildName         = varQual pREL_BASE_Name FSLIT("build")     buildIdKey
551 augmentName       = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
552 appendName        = varQual pREL_BASE_Name FSLIT("++")        appendIdKey
553 andName           = varQual pREL_BASE_Name FSLIT("&&")        andIdKey
554 orName            = varQual pREL_BASE_Name FSLIT("||")        orIdKey
555 assertName        = varQual pREL_BASE_Name FSLIT("assert")    assertIdKey
556 lazyIdName        = wVarQual pREL_BASE_Name FSLIT("lazy")     lazyIdKey
557
558 -- PrelTup
559 fstName           = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
560 sndName           = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
561
562 -- Module PrelNum
563 numClassName      = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
564 fromIntegerName   = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
565 minusName         = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
566 negateName        = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
567 plusIntegerName   = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
568 timesIntegerName  = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
569 integerTyConName  = wTcQual  pREL_NUM_Name FSLIT("Integer") integerTyConKey
570 smallIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
571 largeIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
572
573 -- PrelReal types and classes
574 rationalTyConName   = tcQual   pREL_REAL_Name  FSLIT("Rational") rationalTyConKey
575 ratioTyConName      = tcQual   pREL_REAL_Name  FSLIT("Ratio") ratioTyConKey
576 ratioDataConName    = dataQual pREL_REAL_Name  FSLIT(":%") ratioDataConKey
577 realClassName       = clsQual  pREL_REAL_Name  FSLIT("Real") realClassKey
578 integralClassName   = clsQual  pREL_REAL_Name  FSLIT("Integral") integralClassKey
579 realFracClassName   = clsQual  pREL_REAL_Name  FSLIT("RealFrac") realFracClassKey
580 fractionalClassName = clsQual  pREL_REAL_Name  FSLIT("Fractional") fractionalClassKey
581 fromRationalName    = varQual  pREL_REAL_Name  FSLIT("fromRational") fromRationalClassOpKey
582
583 -- PrelFloat classes
584 floatTyConName     = wTcQual   pREL_FLOAT_Name FSLIT("Float") floatTyConKey
585 floatDataConName   = wDataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
586 doubleTyConName    = wTcQual   pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
587 doubleDataConName  = wDataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
588 floatingClassName  = clsQual  pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
589 realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
590
591 -- Class Ix
592 ixClassName        = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
593
594 -- Class Typeable and Data
595 typeableClassName = clsQual dYNAMIC_Name  FSLIT("Typeable") typeableClassKey
596 dataClassName     = clsQual gENERICS_Name FSLIT("Data")     dataClassKey
597
598 -- Enum module (Enum, Bounded)
599 enumClassName      = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
600 enumFromName       = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
601 enumFromToName     = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
602 enumFromThenName   = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
603 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
604 boundedClassName  = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
605
606 -- List functions
607 concatName        = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
608 filterName        = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
609 zipName           = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
610
611 -- Class Show
612 showClassName     = clsQual pREL_SHOW_Name FSLIT("Show")       showClassKey
613
614 -- Class Read
615 readClassName      = clsQual pREL_READ_Name FSLIT("Read") readClassKey
616
617 -- parallel array types and functions
618 enumFromToPName    = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
619 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
620 parrTyConName     = wTcQual  pREL_PARR_Name FSLIT("[::]")        parrTyConKey
621 parrDataConName   = wDataQual pREL_PARR_Name FSLIT("PArr")       parrDataConKey
622 nullPName         = varQual pREL_PARR_Name FSLIT("nullP")        nullPIdKey
623 lengthPName       = varQual pREL_PARR_Name FSLIT("lengthP")      lengthPIdKey
624 replicatePName    = varQual pREL_PARR_Name FSLIT("replicateP")   replicatePIdKey
625 mapPName          = varQual pREL_PARR_Name FSLIT("mapP")         mapPIdKey
626 filterPName       = varQual pREL_PARR_Name FSLIT("filterP")      filterPIdKey
627 zipPName          = varQual pREL_PARR_Name FSLIT("zipP")         zipPIdKey
628 crossPName        = varQual pREL_PARR_Name FSLIT("crossP")       crossPIdKey
629 indexPName        = varQual pREL_PARR_Name FSLIT("!:")           indexPIdKey
630 toPName           = varQual pREL_PARR_Name FSLIT("toP")          toPIdKey
631 bpermutePName     = varQual pREL_PARR_Name FSLIT("bpermuteP")    bpermutePIdKey
632 bpermuteDftPName  = varQual pREL_PARR_Name FSLIT("bpermuteDftP") bpermuteDftPIdKey
633 indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")     indexOfPIdKey
634
635 -- IOBase things
636 ioTyConName       = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
637 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
638 thenIOName        = varQual  pREL_IO_BASE_Name FSLIT("thenIO") thenIOIdKey
639 bindIOName        = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
640 returnIOName      = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
641 failIOName        = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
642
643 -- IO things
644 printName         = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
645
646 -- Int, Word, and Addr things
647 int8TyConName     = tcQual pREL_INT_Name  FSLIT("Int8") int8TyConKey
648 int16TyConName    = tcQual pREL_INT_Name  FSLIT("Int16") int16TyConKey
649 int32TyConName    = tcQual pREL_INT_Name  FSLIT("Int32") int32TyConKey
650 int64TyConName    = tcQual pREL_INT_Name  FSLIT("Int64") int64TyConKey
651
652 -- Word module
653 word8TyConName    = tcQual   pREL_WORD_Name FSLIT("Word8")  word8TyConKey
654 word16TyConName   = tcQual   pREL_WORD_Name FSLIT("Word16") word16TyConKey
655 word32TyConName   = tcQual   pREL_WORD_Name FSLIT("Word32") word32TyConKey
656 word64TyConName   = tcQual   pREL_WORD_Name FSLIT("Word64") word64TyConKey
657 wordTyConName     = wTcQual   pREL_WORD_Name FSLIT("Word")   wordTyConKey
658 wordDataConName   = wDataQual pREL_WORD_Name FSLIT("W#")     wordDataConKey
659
660 -- Addr module
661 addrTyConName     = wTcQual   aDDR_Name FSLIT("Addr") addrTyConKey
662 addrDataConName   = wDataQual aDDR_Name FSLIT("A#") addrDataConKey
663
664 -- PrelPtr module
665 ptrTyConName      = wTcQual   pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
666 ptrDataConName    = wDataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
667 funPtrTyConName   = wTcQual   pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
668 funPtrDataConName = wDataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
669
670 -- Byte array types
671 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  FSLIT("ByteArray") byteArrayTyConKey
672 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  FSLIT("MutableByteArray") mutableByteArrayTyConKey
673
674 -- Foreign objects and weak pointers
675 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
676 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
677 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
678
679 -- Error module
680 errorName                = wVarQual pREL_ERR_Name FSLIT("error")                errorIdKey
681 assertErrorName          = wVarQual pREL_ERR_Name FSLIT("assertError")          assertErrorIdKey
682 recSelErrorName          = wVarQual pREL_ERR_Name FSLIT("recSelError")          recSelErrorIdKey
683 runtimeErrorName         = wVarQual pREL_ERR_Name FSLIT("runtimeError")         runtimeErrorIdKey
684 irrefutPatErrorName      = wVarQual pREL_ERR_Name FSLIT("irrefutPatError")      irrefutPatErrorIdKey
685 recConErrorName          = wVarQual pREL_ERR_Name FSLIT("recConError")          recConErrorIdKey
686 patErrorName             = wVarQual pREL_ERR_Name FSLIT("patError")             patErrorIdKey
687 noMethodBindingErrorName = wVarQual pREL_ERR_Name FSLIT("noMethodBindingError") noMethodBindingErrorIdKey
688 nonExhaustiveGuardsErrorName 
689   = wVarQual pREL_ERR_Name FSLIT("nonExhaustiveGuardsError") nonExhaustiveGuardsErrorIdKey
690
691 -- PrelST module
692 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
693
694 -- The "split" Id for splittable implicit parameters
695 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
696
697 -- Recursive-do notation
698 mfixName           = varQual mONAD_FIX_Name FSLIT("mfix") mfixIdKey
699 \end{code}
700
701 %************************************************************************
702 %*                                                                      *
703 \subsection{Local helpers}
704 %*                                                                      *
705 %************************************************************************
706
707 All these are original names; hence mkOrig
708
709 \begin{code}
710 varQual  = mk_known_key_name varName
711 dataQual = mk_known_key_name dataName   -- All the constructor names here are for the DataCon
712                                         -- itself, which lives in the VarName name space
713 tcQual   = mk_known_key_name tcName
714 clsQual  = mk_known_key_name clsName
715
716 wVarQual  = mk_wired_in_name varName    -- The wired-in analogues
717 wDataQual = mk_wired_in_name dataName           
718 wTcQual   = mk_wired_in_name tcName
719
720 varQual_RDR  mod str = mkOrig mod (mkOccFS varName str) -- The RDR analogues
721 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
722 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
723 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
724
725 mk_known_key_name space mod str uniq 
726   = mkKnownKeyExternalName (mkBasePkgModule mod) (mkOccFS space str) uniq 
727 mk_wired_in_name space mod str uniq 
728   = mkWiredInName (mkBasePkgModule mod) (mkOccFS space str) uniq
729
730 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
731         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
732         -- And they don't come from any particular module; indeed we always
733         -- want to print them unqualified.  Hence the LocalName
734 \end{code}
735
736 %************************************************************************
737 %*                                                                      *
738 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
739 %*                                                                      *
740 %************************************************************************
741 --MetaHaskell extension hand allocate keys here
742
743 \begin{code}
744 boundedClassKey         = mkPreludeClassUnique 1 
745 enumClassKey            = mkPreludeClassUnique 2 
746 eqClassKey              = mkPreludeClassUnique 3 
747 typeableClassKey        = mkPreludeClassUnique 4
748 floatingClassKey        = mkPreludeClassUnique 5 
749 fractionalClassKey      = mkPreludeClassUnique 6 
750 integralClassKey        = mkPreludeClassUnique 7 
751 monadClassKey           = mkPreludeClassUnique 8 
752 dataClassKey            = mkPreludeClassUnique 9
753 functorClassKey         = mkPreludeClassUnique 10
754 numClassKey             = mkPreludeClassUnique 11
755 ordClassKey             = mkPreludeClassUnique 12
756 readClassKey            = mkPreludeClassUnique 13
757 realClassKey            = mkPreludeClassUnique 14
758 realFloatClassKey       = mkPreludeClassUnique 15
759 realFracClassKey        = mkPreludeClassUnique 16
760 showClassKey            = mkPreludeClassUnique 17
761 cCallableClassKey       = mkPreludeClassUnique 18
762 cReturnableClassKey     = mkPreludeClassUnique 19
763 ixClassKey              = mkPreludeClassUnique 20
764 \end{code}
765
766 %************************************************************************
767 %*                                                                      *
768 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
769 %*                                                                      *
770 %************************************************************************
771
772 \begin{code}
773 addrPrimTyConKey                        = mkPreludeTyConUnique  1
774 addrTyConKey                            = mkPreludeTyConUnique  2
775 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
776 boolTyConKey                            = mkPreludeTyConUnique  4
777 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
778 charPrimTyConKey                        = mkPreludeTyConUnique  7
779 charTyConKey                            = mkPreludeTyConUnique  8
780 doublePrimTyConKey                      = mkPreludeTyConUnique  9
781 doubleTyConKey                          = mkPreludeTyConUnique 10 
782 floatPrimTyConKey                       = mkPreludeTyConUnique 11
783 floatTyConKey                           = mkPreludeTyConUnique 12
784 funTyConKey                             = mkPreludeTyConUnique 13
785 intPrimTyConKey                         = mkPreludeTyConUnique 14
786 intTyConKey                             = mkPreludeTyConUnique 15
787 int8TyConKey                            = mkPreludeTyConUnique 16
788 int16TyConKey                           = mkPreludeTyConUnique 17
789 int32PrimTyConKey                       = mkPreludeTyConUnique 18
790 int32TyConKey                           = mkPreludeTyConUnique 19
791 int64PrimTyConKey                       = mkPreludeTyConUnique 20
792 int64TyConKey                           = mkPreludeTyConUnique 21
793 integerTyConKey                         = mkPreludeTyConUnique 22
794 listTyConKey                            = mkPreludeTyConUnique 23
795 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
796 weakPrimTyConKey                        = mkPreludeTyConUnique 27
797 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
798 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
799 orderingTyConKey                        = mkPreludeTyConUnique 30
800 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
801 ratioTyConKey                           = mkPreludeTyConUnique 32
802 rationalTyConKey                        = mkPreludeTyConUnique 33
803 realWorldTyConKey                       = mkPreludeTyConUnique 34
804 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
805 stablePtrTyConKey                       = mkPreludeTyConUnique 36
806 statePrimTyConKey                       = mkPreludeTyConUnique 50
807 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
808 stableNameTyConKey                      = mkPreludeTyConUnique 52
809 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
810 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
811 ioTyConKey                              = mkPreludeTyConUnique 56
812 byteArrayTyConKey                       = mkPreludeTyConUnique 57
813 wordPrimTyConKey                        = mkPreludeTyConUnique 58
814 wordTyConKey                            = mkPreludeTyConUnique 59
815 word8TyConKey                           = mkPreludeTyConUnique 60
816 word16TyConKey                          = mkPreludeTyConUnique 61 
817 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
818 word32TyConKey                          = mkPreludeTyConUnique 63
819 word64PrimTyConKey                      = mkPreludeTyConUnique 64
820 word64TyConKey                          = mkPreludeTyConUnique 65
821 liftedConKey                            = mkPreludeTyConUnique 66
822 unliftedConKey                          = mkPreludeTyConUnique 67
823 anyBoxConKey                            = mkPreludeTyConUnique 68
824 kindConKey                              = mkPreludeTyConUnique 69
825 boxityConKey                            = mkPreludeTyConUnique 70
826 typeConKey                              = mkPreludeTyConUnique 71
827 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
828 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
829 ptrTyConKey                             = mkPreludeTyConUnique 74
830 funPtrTyConKey                          = mkPreludeTyConUnique 75
831
832 -- Generic Type Constructors
833 crossTyConKey                           = mkPreludeTyConUnique 79
834 plusTyConKey                            = mkPreludeTyConUnique 80
835 genUnitTyConKey                         = mkPreludeTyConUnique 81
836
837 -- Parallel array type constructor
838 parrTyConKey                            = mkPreludeTyConUnique 82
839
840 ---------------- Template Haskell -------------------
841 --      USES TyConUniques 100-119
842 -----------------------------------------------------
843
844 unitTyConKey = mkTupleTyConUnique Boxed 0
845 \end{code}
846
847 %************************************************************************
848 %*                                                                      *
849 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
850 %*                                                                      *
851 %************************************************************************
852
853 \begin{code}
854 addrDataConKey                          = mkPreludeDataConUnique  0
855 charDataConKey                          = mkPreludeDataConUnique  1
856 consDataConKey                          = mkPreludeDataConUnique  2
857 doubleDataConKey                        = mkPreludeDataConUnique  3
858 falseDataConKey                         = mkPreludeDataConUnique  4
859 floatDataConKey                         = mkPreludeDataConUnique  5
860 intDataConKey                           = mkPreludeDataConUnique  6
861 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
862 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
863 nilDataConKey                           = mkPreludeDataConUnique 11
864 ratioDataConKey                         = mkPreludeDataConUnique 12
865 stablePtrDataConKey                     = mkPreludeDataConUnique 13
866 stableNameDataConKey                    = mkPreludeDataConUnique 14
867 trueDataConKey                          = mkPreludeDataConUnique 15
868 wordDataConKey                          = mkPreludeDataConUnique 16
869 ioDataConKey                            = mkPreludeDataConUnique 17
870 ptrDataConKey                           = mkPreludeDataConUnique 18
871 funPtrDataConKey                        = mkPreludeDataConUnique 19
872
873 -- Generic data constructors
874 crossDataConKey                         = mkPreludeDataConUnique 20
875 inlDataConKey                           = mkPreludeDataConUnique 21
876 inrDataConKey                           = mkPreludeDataConUnique 22
877 genUnitDataConKey                       = mkPreludeDataConUnique 23
878
879 -- Data constructor for parallel arrays
880 parrDataConKey                          = mkPreludeDataConUnique 24
881 \end{code}
882
883 %************************************************************************
884 %*                                                                      *
885 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
886 %*                                                                      *
887 %************************************************************************
888
889 \begin{code}
890 absentErrorIdKey              = mkPreludeMiscIdUnique  1
891 augmentIdKey                  = mkPreludeMiscIdUnique  3
892 appendIdKey                   = mkPreludeMiscIdUnique  4
893 buildIdKey                    = mkPreludeMiscIdUnique  5
894 errorIdKey                    = mkPreludeMiscIdUnique  6
895 foldlIdKey                    = mkPreludeMiscIdUnique  7
896 foldrIdKey                    = mkPreludeMiscIdUnique  8
897 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
898 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
899 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
900 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
901 integerZeroIdKey              = mkPreludeMiscIdUnique 13
902 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
903 seqIdKey                      = mkPreludeMiscIdUnique 15
904 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
905 eqStringIdKey                 = mkPreludeMiscIdUnique 17
906 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
907 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
908 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
909 parErrorIdKey                 = mkPreludeMiscIdUnique 21
910 parIdKey                      = mkPreludeMiscIdUnique 22
911 patErrorIdKey                 = mkPreludeMiscIdUnique 23
912 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
913 recConErrorIdKey              = mkPreludeMiscIdUnique 25
914 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
915 traceIdKey                    = mkPreludeMiscIdUnique 27
916 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
917 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
918 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
919 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
920
921 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
922 concatIdKey                   = mkPreludeMiscIdUnique 33
923 filterIdKey                   = mkPreludeMiscIdUnique 34
924 zipIdKey                      = mkPreludeMiscIdUnique 35
925 bindIOIdKey                   = mkPreludeMiscIdUnique 36
926 returnIOIdKey                 = mkPreludeMiscIdUnique 37
927 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
928 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
929 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
930 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
931 printIdKey                    = mkPreludeMiscIdUnique 43
932 failIOIdKey                   = mkPreludeMiscIdUnique 44
933 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
934 voidArgIdKey                  = mkPreludeMiscIdUnique 47
935 splitIdKey                    = mkPreludeMiscIdUnique 48
936 fstIdKey                      = mkPreludeMiscIdUnique 49
937 sndIdKey                      = mkPreludeMiscIdUnique 50
938 otherwiseIdKey                = mkPreludeMiscIdUnique 51
939 assertIdKey                   = mkPreludeMiscIdUnique 53
940 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
941
942 dollarMainKey                 = mkPreludeMiscIdUnique 55
943 runMainKey                    = mkPreludeMiscIdUnique 56
944
945 andIdKey                      = mkPreludeMiscIdUnique 57
946 orIdKey                       = mkPreludeMiscIdUnique 58
947 thenIOIdKey                   = mkPreludeMiscIdUnique 59
948 lazyIdKey                     = mkPreludeMiscIdUnique 60
949 assertErrorIdKey              = mkPreludeMiscIdUnique 61
950
951 -- Parallel array functions
952 nullPIdKey                    = mkPreludeMiscIdUnique 80
953 lengthPIdKey                  = mkPreludeMiscIdUnique 81
954 replicatePIdKey               = mkPreludeMiscIdUnique 82
955 mapPIdKey                     = mkPreludeMiscIdUnique 83
956 filterPIdKey                  = mkPreludeMiscIdUnique 84
957 zipPIdKey                     = mkPreludeMiscIdUnique 85
958 crossPIdKey                   = mkPreludeMiscIdUnique 86
959 indexPIdKey                   = mkPreludeMiscIdUnique 87
960 toPIdKey                      = mkPreludeMiscIdUnique 88
961 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
962 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
963 bpermutePIdKey                = mkPreludeMiscIdUnique 91
964 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
965 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
966 \end{code}
967
968 Certain class operations from Prelude classes.  They get their own
969 uniques so we can look them up easily when we want to conjure them up
970 during type checking.
971
972 \begin{code}
973         -- Just a place holder for  unbound variables  produced by the renamer:
974 unboundKey                    = mkPreludeMiscIdUnique 101 
975
976 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
977 minusClassOpKey               = mkPreludeMiscIdUnique 103
978 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
979 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
980 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
981 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
982 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
983 eqClassOpKey                  = mkPreludeMiscIdUnique 109
984 geClassOpKey                  = mkPreludeMiscIdUnique 110
985 negateClassOpKey              = mkPreludeMiscIdUnique 111
986 failMClassOpKey               = mkPreludeMiscIdUnique 112
987 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
988 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
989 returnMClassOpKey             = mkPreludeMiscIdUnique 117
990
991 -- Recursive do notation
992 mfixIdKey       = mkPreludeMiscIdUnique 118
993
994 ---------------- Template Haskell -------------------
995 --      USES IdUniques 200-299
996 -----------------------------------------------------
997 \end{code}
998
999
1000 %************************************************************************
1001 %*                                                                      *
1002 \subsection{Standard groups of types}
1003 %*                                                                      *
1004 %************************************************************************
1005
1006 \begin{code}
1007 numericTyKeys = 
1008         [ addrTyConKey
1009         , wordTyConKey
1010         , intTyConKey
1011         , integerTyConKey
1012         , doubleTyConKey
1013         , floatTyConKey
1014         ]
1015
1016         -- Renamer always imports these data decls replete with constructors
1017         -- so that desugarer can always see their constructors.  Ugh!
1018 cCallishTyKeys = 
1019         [ addrTyConKey
1020         , wordTyConKey
1021         , byteArrayTyConKey
1022         , mutableByteArrayTyConKey
1023         , stablePtrTyConKey
1024         , int8TyConKey
1025         , int16TyConKey
1026         , int32TyConKey
1027         , int64TyConKey
1028         , word8TyConKey
1029         , word16TyConKey
1030         , word32TyConKey
1031         , word64TyConKey
1032         ]
1033 \end{code}
1034
1035
1036 %************************************************************************
1037 %*                                                                      *
1038 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1039 %*                                                                      *
1040 %************************************************************************
1041
1042 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1043 even though every numeric class has these two as a superclass,
1044 because the list of ambiguous dictionaries hasn't been simplified.
1045
1046 \begin{code}
1047 numericClassKeys =
1048         [ numClassKey
1049         , realClassKey
1050         , integralClassKey
1051         ]
1052         ++ fractionalClassKeys
1053
1054 fractionalClassKeys = 
1055         [ fractionalClassKey
1056         , floatingClassKey
1057         , realFracClassKey
1058         , realFloatClassKey
1059         ]
1060
1061         -- the strictness analyser needs to know about numeric types
1062         -- (see SaAbsInt.lhs)
1063 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1064         [ readClassKey
1065         ]
1066
1067 cCallishClassKeys = 
1068         [ cCallableClassKey
1069         , cReturnableClassKey
1070         ]
1071
1072 standardClassKeys
1073   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1074     --
1075     -- We have to have "CCallable" and "CReturnable" in the standard
1076     -- classes, so that if you go...
1077     --
1078     --      _ccall_ foo ... 93{-numeric literal-} ...
1079     --
1080     -- ... it can do The Right Thing on the 93.
1081
1082 noDictClassKeys         -- These classes are used only for type annotations;
1083                         -- they are not implemented by dictionaries, ever.
1084   = cCallishClassKeys
1085 \end{code}
1086
1087 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1088 (@TcDeriv@).
1089
1090 \begin{code}
1091 derivableClassKeys
1092   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1093       boundedClassKey, showClassKey, readClassKey ]
1094 \end{code}
1095