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