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