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