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