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