[project @ 2003-01-24 14:04:40 by simonmar]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelNames]{Definitions of prelude modules and names}
5
6
7 Nota Bene: all Names defined in here should come from the base package
8
9 * ModuleNames for prelude modules, 
10         e.g.    pREL_BASE_Name :: ModuleName
11
12 * Modules for prelude modules
13         e.g.    pREL_Base :: Module
14
15 * Uniques for Ids, DataCons, TyCons and Classes that the compiler 
16   "knows about" in some way
17         e.g.    intTyConKey :: Unique
18                 minusClassOpKey :: Unique
19
20 * Names for Ids, DataCons, TyCons and Classes that the compiler 
21   "knows about" in some way
22         e.g.    intTyConName :: Name
23                 minusName    :: Name
24   One of these Names contains
25         (a) the module and occurrence name of the thing
26         (b) its Unique
27   The may way the compiler "knows about" one of these things is
28   where the type checker or desugarer needs to look it up. For
29   example, when desugaring list comprehensions the desugarer
30   needs to conjure up 'foldr'.  It does this by looking up
31   foldrName in the environment.
32
33 * RdrNames for Ids, DataCons etc that the compiler may emit into
34   generated code (e.g. for deriving).  It's not necessary to know
35   the uniques for these guys, only their names
36
37
38 \begin{code}
39 module PrelNames (
40         Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
41
42         -----------------------------------------------------------
43         module PrelNames,       -- A huge bunch of (a) Names,  e.g. intTyConName
44                                 --                 (b) Uniques e.g. intTyConKey
45                                 --                 (c) Groups of classes and types
46                                 --                 (d) miscellaneous things
47                                 -- So many that we export them all
48     ) where
49
50 #include "HsVersions.h"
51
52 import Module     ( ModuleName, mkBasePkgModule, mkHomeModule, mkModuleName )
53 import OccName    ( UserFS, dataName, tcName, clsName, varName,
54                     mkKindOccFS, mkOccFS
55                   )
56                   
57 import RdrName    ( RdrName, nameRdrName, mkOrig, rdrNameOcc )
58 import Unique     ( Unique, Uniquable(..), hasKey,
59                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
60                     mkPreludeTyConUnique, mkPreludeClassUnique,
61                     mkTupleTyConUnique, isTupleKey
62                   ) 
63 import BasicTypes ( Boxity(..) )
64 import Name       ( Name, mkInternalName, mkKnownKeyExternalName, mkWiredInName, nameUnique )
65 import SrcLoc     ( noSrcLoc )
66 import Util       ( nOfThem )
67 import Panic      ( panic )
68 import FastString
69
70
71 \end{code}
72
73
74 %************************************************************************
75 %*                                                                      *
76 \subsection{Local Names}
77 %*                                                                      *
78 %************************************************************************
79
80 This *local* name is used by the interactive stuff
81
82 \begin{code}
83 itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
84 \end{code}
85
86 \begin{code}
87 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
88 -- during compiler debugging.
89 mkUnboundName :: RdrName -> Name
90 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
91
92 isUnboundName :: Name -> Bool
93 isUnboundName name = name `hasKey` unboundKey
94 \end{code}
95
96
97 %************************************************************************
98 %*                                                                      *
99 \subsection{Built-in-syntax names
100 %*                                                                      *
101 %************************************************************************
102
103 Built-in syntax names are parsed directly into Exact RdrNames.
104 This predicate just identifies them. 
105
106 \begin{code}
107 isBuiltInSyntaxName :: Name -> Bool
108 isBuiltInSyntaxName n
109   =  isTupleKey uniq
110   || uniq `elem` [listTyConKey, nilDataConKey, consDataConKey,
111                   funTyConKey, parrTyConKey]
112   where
113      uniq = nameUnique n
114 \end{code}
115
116 %************************************************************************
117 %*                                                                      *
118 \subsection{Known key Names}
119 %*                                                                      *
120 %************************************************************************
121
122 This section tells what the compiler knows about the assocation of
123 names with uniques.  These ones are the *non* wired-in ones.  The
124 wired in ones are defined in TysWiredIn etc.
125
126 \begin{code}
127 basicKnownKeyNames :: [Name]
128 basicKnownKeyNames
129  =  [   -- Type constructors (synonyms especially)
130         ioTyConName, ioDataConName,
131         runIOName,
132         orderingTyConName,
133         rationalTyConName,
134         ratioDataConName,
135         ratioTyConName,
136         byteArrayTyConName,
137         mutableByteArrayTyConName,
138         bcoPrimTyConName,
139         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 usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
444 usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
445 superKindName    = kindQual FSLIT("KX") kindConKey
446 superBoxityName  = kindQual FSLIT("BX") boxityConKey
447 liftedConName    = kindQual FSLIT("*") liftedConKey
448 unliftedConName  = kindQual FSLIT("#") unliftedConKey
449 openKindConName  = kindQual FSLIT("?") anyBoxConKey
450 usageKindConName = kindQual FSLIT("$") usageConKey
451 typeConName      = kindQual FSLIT("Type") typeConKey
452
453 funTyConName                  = tcQual  gHC_PRIM_Name FSLIT("(->)")  funTyConKey
454 charPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey 
455 intPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey 
456 int32PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey 
457 int64PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey 
458 wordPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey 
459 word32PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey 
460 word64PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey 
461 addrPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey 
462 floatPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey 
463 doublePrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey 
464 statePrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("State#") statePrimTyConKey 
465 realWorldTyConName            = tcQual  gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey 
466 arrayPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey 
467 byteArrayPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey 
468 mutableArrayPrimTyConName     = tcQual  gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey 
469 mutableByteArrayPrimTyConName = tcQual  gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
470 mutVarPrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey 
471 mVarPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey 
472 stablePtrPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey 
473 stableNamePrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey 
474 foreignObjPrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey 
475 bcoPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey 
476 weakPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey 
477 threadIdPrimTyConName         = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
478 cCallableClassName            = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
479 cReturnableClassName          = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
480
481 unsafeCoerceName = wVarQual gHC_PRIM_Name FSLIT("unsafeCoerce#") unsafeCoerceIdKey 
482 nullAddrName     = wVarQual gHC_PRIM_Name FSLIT("nullAddr#")    nullAddrIdKey
483 seqName          = wVarQual gHC_PRIM_Name FSLIT("seq")          seqIdKey
484 realWorldName    = wVarQual gHC_PRIM_Name FSLIT("realWorld#")   realWorldPrimIdKey
485
486 -- PrelBase data types and constructors
487 charTyConName     = wTcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
488 charDataConName   = wDataQual pREL_BASE_Name FSLIT("C#") charDataConKey
489 intTyConName      = wTcQual   pREL_BASE_Name FSLIT("Int") intTyConKey
490 intDataConName    = wDataQual pREL_BASE_Name FSLIT("I#") intDataConKey
491 orderingTyConName = tcQual   pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
492 boolTyConName     = wTcQual   pREL_BASE_Name FSLIT("Bool") boolTyConKey
493 falseDataConName  = wDataQual pREL_BASE_Name FSLIT("False") falseDataConKey
494 trueDataConName   = wDataQual pREL_BASE_Name FSLIT("True") trueDataConKey
495 listTyConName     = wTcQual   pREL_BASE_Name FSLIT("[]") listTyConKey
496 nilDataConName    = wDataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
497 consDataConName   = wDataQual pREL_BASE_Name FSLIT(":") consDataConKey
498 eqName            = varQual  pREL_BASE_Name FSLIT("==") eqClassOpKey
499 geName            = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
500
501 -- Generics
502 crossTyConName     = tcQual   pREL_BASE_Name FSLIT(":*:") crossTyConKey
503 crossDataConName   = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
504 plusTyConName      = wTcQual   pREL_BASE_Name FSLIT(":+:") plusTyConKey
505 inlDataConName     = wDataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
506 inrDataConName     = wDataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
507 genUnitTyConName   = wTcQual   pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
508 genUnitDataConName = wDataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
509
510 -- Base strings Strings
511 unpackCStringName       = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
512 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
513 unpackCStringFoldrName  = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
514 unpackCStringUtf8Name   = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
515 eqStringName            = varQual pREL_BASE_Name FSLIT("eqString")  eqStringIdKey
516
517 -- Base classes (Eq, Ord, Functor)
518 eqClassName       = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
519 functorClassName  = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
520 ordClassName      = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
521
522 -- Class Monad
523 monadClassName     = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
524 thenMName          = varQual pREL_BASE_Name FSLIT(">>")  thenMClassOpKey
525 bindMName          = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey
526 returnMName        = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
527 failMName          = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
528
529
530 -- Random PrelBase functions
531 otherwiseIdName   = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
532 foldrName         = varQual pREL_BASE_Name FSLIT("foldr")     foldrIdKey
533 buildName         = varQual pREL_BASE_Name FSLIT("build")     buildIdKey
534 augmentName       = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
535 appendName        = varQual pREL_BASE_Name FSLIT("++")        appendIdKey
536 andName           = varQual pREL_BASE_Name FSLIT("&&")        andIdKey
537 orName            = varQual pREL_BASE_Name FSLIT("||")        orIdKey
538 assertName        = varQual pREL_BASE_Name FSLIT("assert")    assertIdKey
539 lazyIdName        = wVarQual pREL_BASE_Name FSLIT("lazy")     lazyIdKey
540
541 -- PrelTup
542 fstName           = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
543 sndName           = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
544
545 -- Module PrelNum
546 numClassName      = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
547 fromIntegerName   = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
548 minusName         = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
549 negateName        = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
550 plusIntegerName   = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
551 timesIntegerName  = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
552 integerTyConName  = wTcQual  pREL_NUM_Name FSLIT("Integer") integerTyConKey
553 smallIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
554 largeIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
555
556 -- PrelReal types and classes
557 rationalTyConName   = tcQual   pREL_REAL_Name  FSLIT("Rational") rationalTyConKey
558 ratioTyConName      = tcQual   pREL_REAL_Name  FSLIT("Ratio") ratioTyConKey
559 ratioDataConName    = dataQual pREL_REAL_Name  FSLIT(":%") ratioDataConKey
560 realClassName       = clsQual  pREL_REAL_Name  FSLIT("Real") realClassKey
561 integralClassName   = clsQual  pREL_REAL_Name  FSLIT("Integral") integralClassKey
562 realFracClassName   = clsQual  pREL_REAL_Name  FSLIT("RealFrac") realFracClassKey
563 fractionalClassName = clsQual  pREL_REAL_Name  FSLIT("Fractional") fractionalClassKey
564 fromRationalName    = varQual  pREL_REAL_Name  FSLIT("fromRational") fromRationalClassOpKey
565
566 -- PrelFloat classes
567 floatTyConName     = wTcQual   pREL_FLOAT_Name FSLIT("Float") floatTyConKey
568 floatDataConName   = wDataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
569 doubleTyConName    = wTcQual   pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
570 doubleDataConName  = wDataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
571 floatingClassName  = clsQual  pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
572 realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
573
574 -- Class Ix
575 ixClassName        = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
576
577 -- Enum module (Enum, Bounded)
578 enumClassName      = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
579 enumFromName       = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
580 enumFromToName     = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
581 enumFromThenName   = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
582 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
583 boundedClassName  = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
584
585 -- List functions
586 concatName        = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
587 filterName        = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
588 zipName           = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
589
590 -- Class Show
591 showClassName     = clsQual pREL_SHOW_Name FSLIT("Show")       showClassKey
592
593 -- Class Read
594 readClassName      = clsQual pREL_READ_Name FSLIT("Read") readClassKey
595
596 -- parallel array types and functions
597 enumFromToPName    = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
598 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
599 parrTyConName     = wTcQual  pREL_PARR_Name FSLIT("[::]")        parrTyConKey
600 parrDataConName   = wDataQual pREL_PARR_Name FSLIT("PArr")       parrDataConKey
601 nullPName         = varQual pREL_PARR_Name FSLIT("nullP")        nullPIdKey
602 lengthPName       = varQual pREL_PARR_Name FSLIT("lengthP")      lengthPIdKey
603 replicatePName    = varQual pREL_PARR_Name FSLIT("replicateP")   replicatePIdKey
604 mapPName          = varQual pREL_PARR_Name FSLIT("mapP")         mapPIdKey
605 filterPName       = varQual pREL_PARR_Name FSLIT("filterP")      filterPIdKey
606 zipPName          = varQual pREL_PARR_Name FSLIT("zipP")         zipPIdKey
607 crossPName        = varQual pREL_PARR_Name FSLIT("crossP")       crossPIdKey
608 indexPName        = varQual pREL_PARR_Name FSLIT("!:")           indexPIdKey
609 toPName           = varQual pREL_PARR_Name FSLIT("toP")          toPIdKey
610 bpermutePName     = varQual pREL_PARR_Name FSLIT("bpermuteP")    bpermutePIdKey
611 bpermuteDftPName  = varQual pREL_PARR_Name FSLIT("bpermuteDftP") bpermuteDftPIdKey
612 indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")     indexOfPIdKey
613
614 -- IOBase things
615 ioTyConName       = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
616 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
617 thenIOName        = varQual  pREL_IO_BASE_Name FSLIT("thenIO") thenIOIdKey
618 bindIOName        = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
619 returnIOName      = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
620 failIOName        = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
621
622 -- IO things
623 printName         = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
624
625 -- Int, Word, and Addr things
626 int8TyConName     = tcQual pREL_INT_Name  FSLIT("Int8") int8TyConKey
627 int16TyConName    = tcQual pREL_INT_Name  FSLIT("Int16") int16TyConKey
628 int32TyConName    = tcQual pREL_INT_Name  FSLIT("Int32") int32TyConKey
629 int64TyConName    = tcQual pREL_INT_Name  FSLIT("Int64") int64TyConKey
630
631 -- Word module
632 word8TyConName    = tcQual   pREL_WORD_Name FSLIT("Word8")  word8TyConKey
633 word16TyConName   = tcQual   pREL_WORD_Name FSLIT("Word16") word16TyConKey
634 word32TyConName   = tcQual   pREL_WORD_Name FSLIT("Word32") word32TyConKey
635 word64TyConName   = tcQual   pREL_WORD_Name FSLIT("Word64") word64TyConKey
636 wordTyConName     = wTcQual   pREL_WORD_Name FSLIT("Word")   wordTyConKey
637 wordDataConName   = wDataQual pREL_WORD_Name FSLIT("W#")     wordDataConKey
638
639 -- Addr module
640 addrTyConName     = wTcQual   aDDR_Name FSLIT("Addr") addrTyConKey
641 addrDataConName   = wDataQual aDDR_Name FSLIT("A#") addrDataConKey
642
643 -- PrelPtr module
644 ptrTyConName      = wTcQual   pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
645 ptrDataConName    = wDataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
646 funPtrTyConName   = wTcQual   pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
647 funPtrDataConName = wDataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
648
649 -- Byte array types
650 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  FSLIT("ByteArray") byteArrayTyConKey
651 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  FSLIT("MutableByteArray") mutableByteArrayTyConKey
652
653 -- Foreign objects and weak pointers
654 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
655 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
656 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
657
658 -- Error module
659 errorName                = wVarQual pREL_ERR_Name FSLIT("error")                errorIdKey
660 assertErrorName          = wVarQual pREL_ERR_Name FSLIT("assertError")          assertErrorIdKey
661 recSelErrorName          = wVarQual pREL_ERR_Name FSLIT("recSelError")          recSelErrorIdKey
662 runtimeErrorName         = wVarQual pREL_ERR_Name FSLIT("runtimeError")         runtimeErrorIdKey
663 irrefutPatErrorName      = wVarQual pREL_ERR_Name FSLIT("irrefutPatError")      irrefutPatErrorIdKey
664 recConErrorName          = wVarQual pREL_ERR_Name FSLIT("recConError")          recConErrorIdKey
665 patErrorName             = wVarQual pREL_ERR_Name FSLIT("patError")             patErrorIdKey
666 noMethodBindingErrorName = wVarQual pREL_ERR_Name FSLIT("noMethodBindingError") noMethodBindingErrorIdKey
667 nonExhaustiveGuardsErrorName 
668   = wVarQual pREL_ERR_Name FSLIT("nonExhaustiveGuardsError") nonExhaustiveGuardsErrorIdKey
669
670 -- PrelST module
671 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
672
673 -- The "split" Id for splittable implicit parameters
674 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
675
676 -- Recursive-do notation
677 mfixName           = varQual mONAD_FIX_Name FSLIT("mfix") mfixIdKey
678 \end{code}
679
680 %************************************************************************
681 %*                                                                      *
682 \subsection{Local helpers}
683 %*                                                                      *
684 %************************************************************************
685
686 All these are original names; hence mkOrig
687
688 \begin{code}
689 varQual  = mk_known_key_name varName
690 dataQual = mk_known_key_name dataName
691 tcQual   = mk_known_key_name tcName
692 clsQual  = mk_known_key_name clsName
693
694 wVarQual  = mk_wired_in_name varName    -- The wired-in analogues
695 wDataQual = mk_wired_in_name dataName           
696 wTcQual   = mk_wired_in_name tcName
697
698 varQual_RDR  mod str = mkOrig mod (mkOccFS varName str)   -- note use of local alias vName
699 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
700 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
701 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
702
703 mk_known_key_name space mod str uniq 
704   = mkKnownKeyExternalName (mkBasePkgModule mod) (mkOccFS space str) uniq 
705 mk_wired_in_name space mod str uniq 
706   = mkWiredInName (mkBasePkgModule mod) (mkOccFS space str) uniq
707
708 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
709         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
710         -- And they don't come from any particular module; indeed we always
711         -- want to print them unqualified.  Hence the LocalName
712 \end{code}
713
714 %************************************************************************
715 %*                                                                      *
716 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
717 %*                                                                      *
718 %************************************************************************
719 --MetaHaskell extension hand allocate keys here
720
721 \begin{code}
722 boundedClassKey         = mkPreludeClassUnique 1 
723 enumClassKey            = mkPreludeClassUnique 2 
724 eqClassKey              = mkPreludeClassUnique 3 
725 floatingClassKey        = mkPreludeClassUnique 5 
726 fractionalClassKey      = mkPreludeClassUnique 6 
727 integralClassKey        = mkPreludeClassUnique 7 
728 monadClassKey           = mkPreludeClassUnique 8 
729 functorClassKey         = mkPreludeClassUnique 10
730 numClassKey             = mkPreludeClassUnique 11
731 ordClassKey             = mkPreludeClassUnique 12
732 readClassKey            = mkPreludeClassUnique 13
733 realClassKey            = mkPreludeClassUnique 14
734 realFloatClassKey       = mkPreludeClassUnique 15
735 realFracClassKey        = mkPreludeClassUnique 16
736 showClassKey            = mkPreludeClassUnique 17
737
738 cCallableClassKey       = mkPreludeClassUnique 18
739 cReturnableClassKey     = mkPreludeClassUnique 19
740
741 ixClassKey              = mkPreludeClassUnique 20
742 \end{code}
743
744 %************************************************************************
745 %*                                                                      *
746 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
747 %*                                                                      *
748 %************************************************************************
749
750 \begin{code}
751 addrPrimTyConKey                        = mkPreludeTyConUnique  1
752 addrTyConKey                            = mkPreludeTyConUnique  2
753 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
754 boolTyConKey                            = mkPreludeTyConUnique  4
755 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
756 charPrimTyConKey                        = mkPreludeTyConUnique  7
757 charTyConKey                            = mkPreludeTyConUnique  8
758 doublePrimTyConKey                      = mkPreludeTyConUnique  9
759 doubleTyConKey                          = mkPreludeTyConUnique 10 
760 floatPrimTyConKey                       = mkPreludeTyConUnique 11
761 floatTyConKey                           = mkPreludeTyConUnique 12
762 funTyConKey                             = mkPreludeTyConUnique 13
763 intPrimTyConKey                         = mkPreludeTyConUnique 14
764 intTyConKey                             = mkPreludeTyConUnique 15
765 int8TyConKey                            = mkPreludeTyConUnique 16
766 int16TyConKey                           = mkPreludeTyConUnique 17
767 int32PrimTyConKey                       = mkPreludeTyConUnique 18
768 int32TyConKey                           = mkPreludeTyConUnique 19
769 int64PrimTyConKey                       = mkPreludeTyConUnique 20
770 int64TyConKey                           = mkPreludeTyConUnique 21
771 integerTyConKey                         = mkPreludeTyConUnique 22
772 listTyConKey                            = mkPreludeTyConUnique 23
773 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
774 weakPrimTyConKey                        = mkPreludeTyConUnique 27
775 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
776 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
777 orderingTyConKey                        = mkPreludeTyConUnique 30
778 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
779 ratioTyConKey                           = mkPreludeTyConUnique 32
780 rationalTyConKey                        = mkPreludeTyConUnique 33
781 realWorldTyConKey                       = mkPreludeTyConUnique 34
782 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
783 stablePtrTyConKey                       = mkPreludeTyConUnique 36
784 statePrimTyConKey                       = mkPreludeTyConUnique 50
785 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
786 stableNameTyConKey                      = mkPreludeTyConUnique 52
787 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
788 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
789 ioTyConKey                              = mkPreludeTyConUnique 56
790 byteArrayTyConKey                       = mkPreludeTyConUnique 57
791 wordPrimTyConKey                        = mkPreludeTyConUnique 58
792 wordTyConKey                            = mkPreludeTyConUnique 59
793 word8TyConKey                           = mkPreludeTyConUnique 60
794 word16TyConKey                          = mkPreludeTyConUnique 61 
795 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
796 word32TyConKey                          = mkPreludeTyConUnique 63
797 word64PrimTyConKey                      = mkPreludeTyConUnique 64
798 word64TyConKey                          = mkPreludeTyConUnique 65
799 liftedConKey                            = mkPreludeTyConUnique 66
800 unliftedConKey                          = mkPreludeTyConUnique 67
801 anyBoxConKey                            = mkPreludeTyConUnique 68
802 kindConKey                              = mkPreludeTyConUnique 69
803 boxityConKey                            = mkPreludeTyConUnique 70
804 typeConKey                              = mkPreludeTyConUnique 71
805 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
806 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
807 ptrTyConKey                             = mkPreludeTyConUnique 74
808 funPtrTyConKey                          = mkPreludeTyConUnique 75
809
810 -- Usage type constructors
811 usageConKey                             = mkPreludeTyConUnique 76
812 usOnceTyConKey                          = mkPreludeTyConUnique 77
813 usManyTyConKey                          = mkPreludeTyConUnique 78
814
815 -- Generic Type Constructors
816 crossTyConKey                           = mkPreludeTyConUnique 79
817 plusTyConKey                            = mkPreludeTyConUnique 80
818 genUnitTyConKey                         = mkPreludeTyConUnique 81
819
820 -- Parallel array type constructor
821 parrTyConKey                            = mkPreludeTyConUnique 82
822
823 ---------------- Template Haskell -------------------
824 --      USES TyConUniques 100-119
825 -----------------------------------------------------
826
827 unitTyConKey = mkTupleTyConUnique Boxed 0
828 \end{code}
829
830 %************************************************************************
831 %*                                                                      *
832 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
833 %*                                                                      *
834 %************************************************************************
835
836 \begin{code}
837 addrDataConKey                          = mkPreludeDataConUnique  0
838 charDataConKey                          = mkPreludeDataConUnique  1
839 consDataConKey                          = mkPreludeDataConUnique  2
840 doubleDataConKey                        = mkPreludeDataConUnique  3
841 falseDataConKey                         = mkPreludeDataConUnique  4
842 floatDataConKey                         = mkPreludeDataConUnique  5
843 intDataConKey                           = mkPreludeDataConUnique  6
844 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
845 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
846 nilDataConKey                           = mkPreludeDataConUnique 11
847 ratioDataConKey                         = mkPreludeDataConUnique 12
848 stablePtrDataConKey                     = mkPreludeDataConUnique 13
849 stableNameDataConKey                    = mkPreludeDataConUnique 14
850 trueDataConKey                          = mkPreludeDataConUnique 15
851 wordDataConKey                          = mkPreludeDataConUnique 16
852 ioDataConKey                            = mkPreludeDataConUnique 17
853 ptrDataConKey                           = mkPreludeDataConUnique 18
854 funPtrDataConKey                        = mkPreludeDataConUnique 19
855
856 -- Generic data constructors
857 crossDataConKey                         = mkPreludeDataConUnique 20
858 inlDataConKey                           = mkPreludeDataConUnique 21
859 inrDataConKey                           = mkPreludeDataConUnique 22
860 genUnitDataConKey                       = mkPreludeDataConUnique 23
861
862 -- Data constructor for parallel arrays
863 parrDataConKey                          = mkPreludeDataConUnique 24
864 \end{code}
865
866 %************************************************************************
867 %*                                                                      *
868 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
869 %*                                                                      *
870 %************************************************************************
871
872 \begin{code}
873 absentErrorIdKey              = mkPreludeMiscIdUnique  1
874 augmentIdKey                  = mkPreludeMiscIdUnique  3
875 appendIdKey                   = mkPreludeMiscIdUnique  4
876 buildIdKey                    = mkPreludeMiscIdUnique  5
877 errorIdKey                    = mkPreludeMiscIdUnique  6
878 foldlIdKey                    = mkPreludeMiscIdUnique  7
879 foldrIdKey                    = mkPreludeMiscIdUnique  8
880 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
881 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
882 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
883 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
884 integerZeroIdKey              = mkPreludeMiscIdUnique 13
885 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
886 seqIdKey                      = mkPreludeMiscIdUnique 15
887 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
888 eqStringIdKey                 = mkPreludeMiscIdUnique 17
889 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
890 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
891 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
892 parErrorIdKey                 = mkPreludeMiscIdUnique 21
893 parIdKey                      = mkPreludeMiscIdUnique 22
894 patErrorIdKey                 = mkPreludeMiscIdUnique 23
895 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
896 recConErrorIdKey              = mkPreludeMiscIdUnique 25
897 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
898 traceIdKey                    = mkPreludeMiscIdUnique 27
899 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
900 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
901 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
902 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
903
904 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
905 concatIdKey                   = mkPreludeMiscIdUnique 33
906 filterIdKey                   = mkPreludeMiscIdUnique 34
907 zipIdKey                      = mkPreludeMiscIdUnique 35
908 bindIOIdKey                   = mkPreludeMiscIdUnique 36
909 returnIOIdKey                 = mkPreludeMiscIdUnique 37
910 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
911 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
912 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
913 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
914 printIdKey                    = mkPreludeMiscIdUnique 43
915 failIOIdKey                   = mkPreludeMiscIdUnique 44
916 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
917 voidArgIdKey                  = mkPreludeMiscIdUnique 47
918 splitIdKey                    = mkPreludeMiscIdUnique 48
919 fstIdKey                      = mkPreludeMiscIdUnique 49
920 sndIdKey                      = mkPreludeMiscIdUnique 50
921 otherwiseIdKey                = mkPreludeMiscIdUnique 51
922 assertIdKey                   = mkPreludeMiscIdUnique 53
923 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
924
925 dollarMainKey                 = mkPreludeMiscIdUnique 55
926 runMainKey                    = mkPreludeMiscIdUnique 56
927
928 andIdKey                      = mkPreludeMiscIdUnique 57
929 orIdKey                       = mkPreludeMiscIdUnique 58
930 thenIOIdKey                   = mkPreludeMiscIdUnique 59
931 lazyIdKey                     = mkPreludeMiscIdUnique 60
932 assertErrorIdKey              = mkPreludeMiscIdUnique 61
933
934 -- Parallel array functions
935 nullPIdKey                    = mkPreludeMiscIdUnique 80
936 lengthPIdKey                  = mkPreludeMiscIdUnique 81
937 replicatePIdKey               = mkPreludeMiscIdUnique 82
938 mapPIdKey                     = mkPreludeMiscIdUnique 83
939 filterPIdKey                  = mkPreludeMiscIdUnique 84
940 zipPIdKey                     = mkPreludeMiscIdUnique 85
941 crossPIdKey                   = mkPreludeMiscIdUnique 86
942 indexPIdKey                   = mkPreludeMiscIdUnique 87
943 toPIdKey                      = mkPreludeMiscIdUnique 88
944 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
945 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
946 bpermutePIdKey                = mkPreludeMiscIdUnique 91
947 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
948 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
949 \end{code}
950
951 Certain class operations from Prelude classes.  They get their own
952 uniques so we can look them up easily when we want to conjure them up
953 during type checking.
954
955 \begin{code}
956         -- Just a place holder for  unbound variables  produced by the renamer:
957 unboundKey                    = mkPreludeMiscIdUnique 101 
958
959 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
960 minusClassOpKey               = mkPreludeMiscIdUnique 103
961 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
962 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
963 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
964 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
965 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
966 eqClassOpKey                  = mkPreludeMiscIdUnique 109
967 geClassOpKey                  = mkPreludeMiscIdUnique 110
968 negateClassOpKey              = mkPreludeMiscIdUnique 111
969 failMClassOpKey               = mkPreludeMiscIdUnique 112
970 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
971 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
972 returnMClassOpKey             = mkPreludeMiscIdUnique 117
973
974 -- Recursive do notation
975 mfixIdKey       = mkPreludeMiscIdUnique 118
976
977 ---------------- Template Haskell -------------------
978 --      USES IdUniques 200-299
979 -----------------------------------------------------
980 \end{code}
981
982
983 %************************************************************************
984 %*                                                                      *
985 \subsection{Standard groups of types}
986 %*                                                                      *
987 %************************************************************************
988
989 \begin{code}
990 numericTyKeys = 
991         [ addrTyConKey
992         , wordTyConKey
993         , intTyConKey
994         , integerTyConKey
995         , doubleTyConKey
996         , floatTyConKey
997         ]
998
999         -- Renamer always imports these data decls replete with constructors
1000         -- so that desugarer can always see their constructors.  Ugh!
1001 cCallishTyKeys = 
1002         [ addrTyConKey
1003         , wordTyConKey
1004         , byteArrayTyConKey
1005         , mutableByteArrayTyConKey
1006         , stablePtrTyConKey
1007         , int8TyConKey
1008         , int16TyConKey
1009         , int32TyConKey
1010         , int64TyConKey
1011         , word8TyConKey
1012         , word16TyConKey
1013         , word32TyConKey
1014         , word64TyConKey
1015         ]
1016 \end{code}
1017
1018
1019 %************************************************************************
1020 %*                                                                      *
1021 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1022 %*                                                                      *
1023 %************************************************************************
1024
1025 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1026 even though every numeric class has these two as a superclass,
1027 because the list of ambiguous dictionaries hasn't been simplified.
1028
1029 \begin{code}
1030 numericClassKeys =
1031         [ numClassKey
1032         , realClassKey
1033         , integralClassKey
1034         ]
1035         ++ fractionalClassKeys
1036
1037 fractionalClassKeys = 
1038         [ fractionalClassKey
1039         , floatingClassKey
1040         , realFracClassKey
1041         , realFloatClassKey
1042         ]
1043
1044         -- the strictness analyser needs to know about numeric types
1045         -- (see SaAbsInt.lhs)
1046 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1047         [ readClassKey
1048         ]
1049
1050 cCallishClassKeys = 
1051         [ cCallableClassKey
1052         , cReturnableClassKey
1053         ]
1054
1055 standardClassKeys
1056   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1057     --
1058     -- We have to have "CCallable" and "CReturnable" in the standard
1059     -- classes, so that if you go...
1060     --
1061     --      _ccall_ foo ... 93{-numeric literal-} ...
1062     --
1063     -- ... it can do The Right Thing on the 93.
1064
1065 noDictClassKeys         -- These classes are used only for type annotations;
1066                         -- they are not implemented by dictionaries, ever.
1067   = cCallishClassKeys
1068 \end{code}
1069
1070 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1071 (@TcDeriv@).
1072
1073 \begin{code}
1074 derivableClassKeys
1075   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1076       boundedClassKey, showClassKey, readClassKey ]
1077 \end{code}
1078