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