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