[project @ 2003-02-04 15:09:38 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
688 tcQual   = mk_known_key_name tcName
689 clsQual  = mk_known_key_name clsName
690
691 wVarQual  = mk_wired_in_name varName    -- The wired-in analogues
692 wDataQual = mk_wired_in_name dataName           
693 wTcQual   = mk_wired_in_name tcName
694
695 varQual_RDR  mod str = mkOrig mod (mkOccFS varName str)   -- note use of local alias vName
696 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
697 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
698 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
699
700 mk_known_key_name space mod str uniq 
701   = mkKnownKeyExternalName (mkBasePkgModule mod) (mkOccFS space str) uniq 
702 mk_wired_in_name space mod str uniq 
703   = mkWiredInName (mkBasePkgModule mod) (mkOccFS space str) uniq
704
705 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
706         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
707         -- And they don't come from any particular module; indeed we always
708         -- want to print them unqualified.  Hence the LocalName
709 \end{code}
710
711 %************************************************************************
712 %*                                                                      *
713 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
714 %*                                                                      *
715 %************************************************************************
716 --MetaHaskell extension hand allocate keys here
717
718 \begin{code}
719 boundedClassKey         = mkPreludeClassUnique 1 
720 enumClassKey            = mkPreludeClassUnique 2 
721 eqClassKey              = mkPreludeClassUnique 3 
722 floatingClassKey        = mkPreludeClassUnique 5 
723 fractionalClassKey      = mkPreludeClassUnique 6 
724 integralClassKey        = mkPreludeClassUnique 7 
725 monadClassKey           = mkPreludeClassUnique 8 
726 functorClassKey         = mkPreludeClassUnique 10
727 numClassKey             = mkPreludeClassUnique 11
728 ordClassKey             = mkPreludeClassUnique 12
729 readClassKey            = mkPreludeClassUnique 13
730 realClassKey            = mkPreludeClassUnique 14
731 realFloatClassKey       = mkPreludeClassUnique 15
732 realFracClassKey        = mkPreludeClassUnique 16
733 showClassKey            = mkPreludeClassUnique 17
734
735 cCallableClassKey       = mkPreludeClassUnique 18
736 cReturnableClassKey     = mkPreludeClassUnique 19
737
738 ixClassKey              = mkPreludeClassUnique 20
739 \end{code}
740
741 %************************************************************************
742 %*                                                                      *
743 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
744 %*                                                                      *
745 %************************************************************************
746
747 \begin{code}
748 addrPrimTyConKey                        = mkPreludeTyConUnique  1
749 addrTyConKey                            = mkPreludeTyConUnique  2
750 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
751 boolTyConKey                            = mkPreludeTyConUnique  4
752 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
753 charPrimTyConKey                        = mkPreludeTyConUnique  7
754 charTyConKey                            = mkPreludeTyConUnique  8
755 doublePrimTyConKey                      = mkPreludeTyConUnique  9
756 doubleTyConKey                          = mkPreludeTyConUnique 10 
757 floatPrimTyConKey                       = mkPreludeTyConUnique 11
758 floatTyConKey                           = mkPreludeTyConUnique 12
759 funTyConKey                             = mkPreludeTyConUnique 13
760 intPrimTyConKey                         = mkPreludeTyConUnique 14
761 intTyConKey                             = mkPreludeTyConUnique 15
762 int8TyConKey                            = mkPreludeTyConUnique 16
763 int16TyConKey                           = mkPreludeTyConUnique 17
764 int32PrimTyConKey                       = mkPreludeTyConUnique 18
765 int32TyConKey                           = mkPreludeTyConUnique 19
766 int64PrimTyConKey                       = mkPreludeTyConUnique 20
767 int64TyConKey                           = mkPreludeTyConUnique 21
768 integerTyConKey                         = mkPreludeTyConUnique 22
769 listTyConKey                            = mkPreludeTyConUnique 23
770 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
771 weakPrimTyConKey                        = mkPreludeTyConUnique 27
772 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
773 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
774 orderingTyConKey                        = mkPreludeTyConUnique 30
775 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
776 ratioTyConKey                           = mkPreludeTyConUnique 32
777 rationalTyConKey                        = mkPreludeTyConUnique 33
778 realWorldTyConKey                       = mkPreludeTyConUnique 34
779 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
780 stablePtrTyConKey                       = mkPreludeTyConUnique 36
781 statePrimTyConKey                       = mkPreludeTyConUnique 50
782 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
783 stableNameTyConKey                      = mkPreludeTyConUnique 52
784 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
785 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
786 ioTyConKey                              = mkPreludeTyConUnique 56
787 byteArrayTyConKey                       = mkPreludeTyConUnique 57
788 wordPrimTyConKey                        = mkPreludeTyConUnique 58
789 wordTyConKey                            = mkPreludeTyConUnique 59
790 word8TyConKey                           = mkPreludeTyConUnique 60
791 word16TyConKey                          = mkPreludeTyConUnique 61 
792 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
793 word32TyConKey                          = mkPreludeTyConUnique 63
794 word64PrimTyConKey                      = mkPreludeTyConUnique 64
795 word64TyConKey                          = mkPreludeTyConUnique 65
796 liftedConKey                            = mkPreludeTyConUnique 66
797 unliftedConKey                          = mkPreludeTyConUnique 67
798 anyBoxConKey                            = mkPreludeTyConUnique 68
799 kindConKey                              = mkPreludeTyConUnique 69
800 boxityConKey                            = mkPreludeTyConUnique 70
801 typeConKey                              = mkPreludeTyConUnique 71
802 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
803 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
804 ptrTyConKey                             = mkPreludeTyConUnique 74
805 funPtrTyConKey                          = mkPreludeTyConUnique 75
806
807 -- Generic Type Constructors
808 crossTyConKey                           = mkPreludeTyConUnique 79
809 plusTyConKey                            = mkPreludeTyConUnique 80
810 genUnitTyConKey                         = mkPreludeTyConUnique 81
811
812 -- Parallel array type constructor
813 parrTyConKey                            = mkPreludeTyConUnique 82
814
815 ---------------- Template Haskell -------------------
816 --      USES TyConUniques 100-119
817 -----------------------------------------------------
818
819 unitTyConKey = mkTupleTyConUnique Boxed 0
820 \end{code}
821
822 %************************************************************************
823 %*                                                                      *
824 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
825 %*                                                                      *
826 %************************************************************************
827
828 \begin{code}
829 addrDataConKey                          = mkPreludeDataConUnique  0
830 charDataConKey                          = mkPreludeDataConUnique  1
831 consDataConKey                          = mkPreludeDataConUnique  2
832 doubleDataConKey                        = mkPreludeDataConUnique  3
833 falseDataConKey                         = mkPreludeDataConUnique  4
834 floatDataConKey                         = mkPreludeDataConUnique  5
835 intDataConKey                           = mkPreludeDataConUnique  6
836 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
837 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
838 nilDataConKey                           = mkPreludeDataConUnique 11
839 ratioDataConKey                         = mkPreludeDataConUnique 12
840 stablePtrDataConKey                     = mkPreludeDataConUnique 13
841 stableNameDataConKey                    = mkPreludeDataConUnique 14
842 trueDataConKey                          = mkPreludeDataConUnique 15
843 wordDataConKey                          = mkPreludeDataConUnique 16
844 ioDataConKey                            = mkPreludeDataConUnique 17
845 ptrDataConKey                           = mkPreludeDataConUnique 18
846 funPtrDataConKey                        = mkPreludeDataConUnique 19
847
848 -- Generic data constructors
849 crossDataConKey                         = mkPreludeDataConUnique 20
850 inlDataConKey                           = mkPreludeDataConUnique 21
851 inrDataConKey                           = mkPreludeDataConUnique 22
852 genUnitDataConKey                       = mkPreludeDataConUnique 23
853
854 -- Data constructor for parallel arrays
855 parrDataConKey                          = mkPreludeDataConUnique 24
856 \end{code}
857
858 %************************************************************************
859 %*                                                                      *
860 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
861 %*                                                                      *
862 %************************************************************************
863
864 \begin{code}
865 absentErrorIdKey              = mkPreludeMiscIdUnique  1
866 augmentIdKey                  = mkPreludeMiscIdUnique  3
867 appendIdKey                   = mkPreludeMiscIdUnique  4
868 buildIdKey                    = mkPreludeMiscIdUnique  5
869 errorIdKey                    = mkPreludeMiscIdUnique  6
870 foldlIdKey                    = mkPreludeMiscIdUnique  7
871 foldrIdKey                    = mkPreludeMiscIdUnique  8
872 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
873 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
874 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
875 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
876 integerZeroIdKey              = mkPreludeMiscIdUnique 13
877 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
878 seqIdKey                      = mkPreludeMiscIdUnique 15
879 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
880 eqStringIdKey                 = mkPreludeMiscIdUnique 17
881 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
882 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
883 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
884 parErrorIdKey                 = mkPreludeMiscIdUnique 21
885 parIdKey                      = mkPreludeMiscIdUnique 22
886 patErrorIdKey                 = mkPreludeMiscIdUnique 23
887 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
888 recConErrorIdKey              = mkPreludeMiscIdUnique 25
889 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
890 traceIdKey                    = mkPreludeMiscIdUnique 27
891 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
892 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
893 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
894 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
895
896 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
897 concatIdKey                   = mkPreludeMiscIdUnique 33
898 filterIdKey                   = mkPreludeMiscIdUnique 34
899 zipIdKey                      = mkPreludeMiscIdUnique 35
900 bindIOIdKey                   = mkPreludeMiscIdUnique 36
901 returnIOIdKey                 = mkPreludeMiscIdUnique 37
902 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
903 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
904 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
905 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
906 printIdKey                    = mkPreludeMiscIdUnique 43
907 failIOIdKey                   = mkPreludeMiscIdUnique 44
908 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
909 voidArgIdKey                  = mkPreludeMiscIdUnique 47
910 splitIdKey                    = mkPreludeMiscIdUnique 48
911 fstIdKey                      = mkPreludeMiscIdUnique 49
912 sndIdKey                      = mkPreludeMiscIdUnique 50
913 otherwiseIdKey                = mkPreludeMiscIdUnique 51
914 assertIdKey                   = mkPreludeMiscIdUnique 53
915 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
916
917 dollarMainKey                 = mkPreludeMiscIdUnique 55
918 runMainKey                    = mkPreludeMiscIdUnique 56
919
920 andIdKey                      = mkPreludeMiscIdUnique 57
921 orIdKey                       = mkPreludeMiscIdUnique 58
922 thenIOIdKey                   = mkPreludeMiscIdUnique 59
923 lazyIdKey                     = mkPreludeMiscIdUnique 60
924 assertErrorIdKey              = mkPreludeMiscIdUnique 61
925
926 -- Parallel array functions
927 nullPIdKey                    = mkPreludeMiscIdUnique 80
928 lengthPIdKey                  = mkPreludeMiscIdUnique 81
929 replicatePIdKey               = mkPreludeMiscIdUnique 82
930 mapPIdKey                     = mkPreludeMiscIdUnique 83
931 filterPIdKey                  = mkPreludeMiscIdUnique 84
932 zipPIdKey                     = mkPreludeMiscIdUnique 85
933 crossPIdKey                   = mkPreludeMiscIdUnique 86
934 indexPIdKey                   = mkPreludeMiscIdUnique 87
935 toPIdKey                      = mkPreludeMiscIdUnique 88
936 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
937 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
938 bpermutePIdKey                = mkPreludeMiscIdUnique 91
939 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
940 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
941 \end{code}
942
943 Certain class operations from Prelude classes.  They get their own
944 uniques so we can look them up easily when we want to conjure them up
945 during type checking.
946
947 \begin{code}
948         -- Just a place holder for  unbound variables  produced by the renamer:
949 unboundKey                    = mkPreludeMiscIdUnique 101 
950
951 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
952 minusClassOpKey               = mkPreludeMiscIdUnique 103
953 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
954 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
955 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
956 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
957 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
958 eqClassOpKey                  = mkPreludeMiscIdUnique 109
959 geClassOpKey                  = mkPreludeMiscIdUnique 110
960 negateClassOpKey              = mkPreludeMiscIdUnique 111
961 failMClassOpKey               = mkPreludeMiscIdUnique 112
962 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
963 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
964 returnMClassOpKey             = mkPreludeMiscIdUnique 117
965
966 -- Recursive do notation
967 mfixIdKey       = mkPreludeMiscIdUnique 118
968
969 ---------------- Template Haskell -------------------
970 --      USES IdUniques 200-299
971 -----------------------------------------------------
972 \end{code}
973
974
975 %************************************************************************
976 %*                                                                      *
977 \subsection{Standard groups of types}
978 %*                                                                      *
979 %************************************************************************
980
981 \begin{code}
982 numericTyKeys = 
983         [ addrTyConKey
984         , wordTyConKey
985         , intTyConKey
986         , integerTyConKey
987         , doubleTyConKey
988         , floatTyConKey
989         ]
990
991         -- Renamer always imports these data decls replete with constructors
992         -- so that desugarer can always see their constructors.  Ugh!
993 cCallishTyKeys = 
994         [ addrTyConKey
995         , wordTyConKey
996         , byteArrayTyConKey
997         , mutableByteArrayTyConKey
998         , stablePtrTyConKey
999         , int8TyConKey
1000         , int16TyConKey
1001         , int32TyConKey
1002         , int64TyConKey
1003         , word8TyConKey
1004         , word16TyConKey
1005         , word32TyConKey
1006         , word64TyConKey
1007         ]
1008 \end{code}
1009
1010
1011 %************************************************************************
1012 %*                                                                      *
1013 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1014 %*                                                                      *
1015 %************************************************************************
1016
1017 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1018 even though every numeric class has these two as a superclass,
1019 because the list of ambiguous dictionaries hasn't been simplified.
1020
1021 \begin{code}
1022 numericClassKeys =
1023         [ numClassKey
1024         , realClassKey
1025         , integralClassKey
1026         ]
1027         ++ fractionalClassKeys
1028
1029 fractionalClassKeys = 
1030         [ fractionalClassKey
1031         , floatingClassKey
1032         , realFracClassKey
1033         , realFloatClassKey
1034         ]
1035
1036         -- the strictness analyser needs to know about numeric types
1037         -- (see SaAbsInt.lhs)
1038 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1039         [ readClassKey
1040         ]
1041
1042 cCallishClassKeys = 
1043         [ cCallableClassKey
1044         , cReturnableClassKey
1045         ]
1046
1047 standardClassKeys
1048   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1049     --
1050     -- We have to have "CCallable" and "CReturnable" in the standard
1051     -- classes, so that if you go...
1052     --
1053     --      _ccall_ foo ... 93{-numeric literal-} ...
1054     --
1055     -- ... it can do The Right Thing on the 93.
1056
1057 noDictClassKeys         -- These classes are used only for type annotations;
1058                         -- they are not implemented by dictionaries, ever.
1059   = cCallishClassKeys
1060 \end{code}
1061
1062 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1063 (@TcDeriv@).
1064
1065 \begin{code}
1066 derivableClassKeys
1067   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1068       boundedClassKey, showClassKey, readClassKey ]
1069 \end{code}
1070