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