[project @ 2004-04-02 02:39:26 by igloo]
[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  ++ typeableClassNames
127  ++ [   -- Type constructors (synonyms especially)
128         ioTyConName, ioDataConName,
129         runIOName,
130         orderingTyConName,
131         rationalTyConName,
132         ratioDataConName,
133         ratioTyConName,
134         byteArrayTyConName,
135         mutableByteArrayTyConName,
136         integerTyConName, smallIntegerDataConName, largeIntegerDataConName,
137
138         --  Classes.  *Must* include:
139         --      classes that are grabbed by key (e.g., eqClassKey)
140         --      classes in "Class.standardClassKeys" (quite a few)
141         eqClassName,                    -- mentioned, derivable
142         ordClassName,                   -- derivable
143         boundedClassName,               -- derivable
144         numClassName,                   -- mentioned, numeric
145         enumClassName,                  -- derivable
146         monadClassName,
147         functorClassName,
148         realClassName,                  -- numeric
149         integralClassName,              -- numeric
150         fractionalClassName,            -- numeric
151         floatingClassName,              -- numeric
152         realFracClassName,              -- numeric
153         realFloatClassName,             -- numeric
154         dataClassName, 
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("mkTyConApp")
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
560 typeableClassName  = clsQual tYPEABLE FSLIT("Typeable") typeableClassKey
561 typeable1ClassName = clsQual tYPEABLE FSLIT("Typeable1") typeable1ClassKey
562 typeable2ClassName = clsQual tYPEABLE FSLIT("Typeable2") typeable2ClassKey
563 typeable3ClassName = clsQual tYPEABLE FSLIT("Typeable3") typeable3ClassKey
564 typeable4ClassName = clsQual tYPEABLE FSLIT("Typeable4") typeable4ClassKey
565 typeable5ClassName = clsQual tYPEABLE FSLIT("Typeable5") typeable5ClassKey
566 typeable6ClassName = clsQual tYPEABLE FSLIT("Typeable6") typeable6ClassKey
567 typeable7ClassName = clsQual tYPEABLE FSLIT("Typeable7") typeable7ClassKey
568
569 typeableClassNames =    [ typeableClassName, typeable1ClassName, typeable2ClassName
570                         , typeable3ClassName, typeable4ClassName, typeable5ClassName
571                         , typeable6ClassName, typeable7ClassName ]
572
573 -- Class Data
574 dataClassName = clsQual gENERICS FSLIT("Data") dataClassKey
575
576 -- Error module
577 assertErrorName   = varQual pREL_ERR FSLIT("assertError") assertErrorIdKey
578
579 -- Enum module (Enum, Bounded)
580 enumClassName      = clsQual pREL_ENUM FSLIT("Enum") enumClassKey
581 enumFromName       = methName enumClassName FSLIT("enumFrom") enumFromClassOpKey
582 enumFromToName     = methName enumClassName FSLIT("enumFromTo") enumFromToClassOpKey
583 enumFromThenName   = methName enumClassName FSLIT("enumFromThen") enumFromThenClassOpKey
584 enumFromThenToName = methName enumClassName FSLIT("enumFromThenTo") enumFromThenToClassOpKey
585 boundedClassName   = clsQual pREL_ENUM FSLIT("Bounded") boundedClassKey
586
587 -- List functions
588 concatName        = varQual pREL_LIST FSLIT("concat") concatIdKey
589 filterName        = varQual pREL_LIST FSLIT("filter") filterIdKey
590 zipName           = varQual pREL_LIST FSLIT("zip") zipIdKey
591
592 -- Class Show
593 showClassName     = clsQual pREL_SHOW FSLIT("Show")       showClassKey
594
595 -- Class Read
596 readClassName      = clsQual pREL_READ FSLIT("Read") readClassKey
597
598 -- parallel array types and functions
599 enumFromToPName    = varQual pREL_PARR FSLIT("enumFromToP") enumFromToPIdKey
600 enumFromThenToPName= varQual pREL_PARR FSLIT("enumFromThenToP") enumFromThenToPIdKey
601 nullPName         = varQual pREL_PARR FSLIT("nullP")             nullPIdKey
602 lengthPName       = varQual pREL_PARR FSLIT("lengthP")           lengthPIdKey
603 replicatePName    = varQual pREL_PARR FSLIT("replicateP")        replicatePIdKey
604 mapPName          = varQual pREL_PARR FSLIT("mapP")              mapPIdKey
605 filterPName       = varQual pREL_PARR FSLIT("filterP")           filterPIdKey
606 zipPName          = varQual pREL_PARR FSLIT("zipP")              zipPIdKey
607 crossPName        = varQual pREL_PARR FSLIT("crossP")            crossPIdKey
608 indexPName        = varQual pREL_PARR FSLIT("!:")                indexPIdKey
609 toPName           = varQual pREL_PARR FSLIT("toP")               toPIdKey
610 bpermutePName     = varQual pREL_PARR FSLIT("bpermuteP")    bpermutePIdKey
611 bpermuteDftPName  = varQual pREL_PARR FSLIT("bpermuteDftP") bpermuteDftPIdKey
612 indexOfPName      = varQual pREL_PARR FSLIT("indexOfP")     indexOfPIdKey
613
614 -- IOBase things
615 ioTyConName       = tcQual  pREL_IO_BASE FSLIT("IO") ioTyConKey
616 ioDataConName     = conName ioTyConName  FSLIT("IO") ioDataConKey
617 thenIOName        = varQual pREL_IO_BASE FSLIT("thenIO") thenIOIdKey
618 bindIOName        = varQual pREL_IO_BASE FSLIT("bindIO") bindIOIdKey
619 returnIOName      = varQual pREL_IO_BASE FSLIT("returnIO") returnIOIdKey
620 failIOName        = varQual pREL_IO_BASE FSLIT("failIO") failIOIdKey
621
622 -- IO things
623 printName         = varQual sYSTEM_IO FSLIT("print") printIdKey
624
625 -- Int, Word, and Addr things
626 int8TyConName     = tcQual pREL_INT  FSLIT("Int8") int8TyConKey
627 int16TyConName    = tcQual pREL_INT  FSLIT("Int16") int16TyConKey
628 int32TyConName    = tcQual pREL_INT  FSLIT("Int32") int32TyConKey
629 int64TyConName    = tcQual pREL_INT  FSLIT("Int64") int64TyConKey
630
631 -- Word module
632 word8TyConName    = tcQual  pREL_WORD FSLIT("Word8")  word8TyConKey
633 word16TyConName   = tcQual  pREL_WORD FSLIT("Word16") word16TyConKey
634 word32TyConName   = tcQual  pREL_WORD FSLIT("Word32") word32TyConKey
635 word64TyConName   = tcQual  pREL_WORD FSLIT("Word64") word64TyConKey
636 wordTyConName     = tcQual  pREL_WORD FSLIT("Word")   wordTyConKey
637 wordDataConName   = conName wordTyConName FSLIT("W#") wordDataConKey
638
639 -- Addr module
640 addrTyConName     = tcQual   aDDR FSLIT("Addr") addrTyConKey
641
642 -- PrelPtr module
643 ptrTyConName      = tcQual   pREL_PTR FSLIT("Ptr") ptrTyConKey
644 funPtrTyConName   = tcQual   pREL_PTR FSLIT("FunPtr") funPtrTyConKey
645
646 -- Byte array types
647 byteArrayTyConName        = tcQual pREL_BYTEARR  FSLIT("ByteArray") byteArrayTyConKey
648 mutableByteArrayTyConName = tcQual pREL_BYTEARR  FSLIT("MutableByteArray") mutableByteArrayTyConKey
649
650 -- Foreign objects and weak pointers
651 stablePtrTyConName    = tcQual   pREL_STABLE FSLIT("StablePtr") stablePtrTyConKey
652 newStablePtrName      = varQual  pREL_STABLE FSLIT("newStablePtr") newStablePtrIdKey
653
654 -- PrelST module
655 runSTRepName       = varQual pREL_ST  FSLIT("runSTRep") runSTRepIdKey
656
657 -- The "split" Id for splittable implicit parameters
658 splitName          = varQual gLA_EXTS FSLIT("split") splitIdKey
659
660 -- Recursive-do notation
661 mfixName           = varQual mONAD_FIX FSLIT("mfix") mfixIdKey
662
663 -- Arrow notation
664 arrAName           = varQual aRROW FSLIT("arr") arrAIdKey
665 composeAName       = varQual aRROW FSLIT(">>>") composeAIdKey
666 firstAName         = varQual aRROW FSLIT("first")       firstAIdKey
667 appAName           = varQual aRROW FSLIT("app") appAIdKey
668 choiceAName        = varQual aRROW FSLIT("|||") choiceAIdKey
669 loopAName          = varQual aRROW FSLIT("loop")        loopAIdKey
670
671 -- dotnet interop
672 objectTyConName     = tcQual   dOTNET FSLIT("Object") objectTyConKey
673         -- objectTyConName was "wTcQual", but that's gone now, and
674         -- I can't see why it was wired in anyway...
675 unmarshalObjectName = varQual  dOTNET FSLIT("unmarshalObject") unmarshalObjectIdKey
676 marshalObjectName   = varQual  dOTNET FSLIT("marshalObject") marshalObjectIdKey
677 marshalStringName   = varQual  dOTNET FSLIT("marshalString") marshalStringIdKey
678 unmarshalStringName = varQual  dOTNET FSLIT("unmarshalString") unmarshalStringIdKey
679 checkDotnetResName  = varQual  dOTNET FSLIT("checkResult")     checkDotnetResNameIdKey
680 \end{code}
681
682 %************************************************************************
683 %*                                                                      *
684 \subsection{Local helpers}
685 %*                                                                      *
686 %************************************************************************
687
688 All these are original names; hence mkOrig
689
690 \begin{code}
691 varQual  = mk_known_key_name varName
692 tcQual   = mk_known_key_name tcName
693 clsQual  = mk_known_key_name clsName
694
695 mk_known_key_name space mod str uniq 
696   = mkExternalName uniq mod (mkOccFS space str) 
697                    Nothing noSrcLoc
698
699 conName :: Name -> FastString -> Unique -> Name
700 conName tycon occ uniq
701   = mkExternalName uniq (nameModule tycon) (mkOccFS dataName occ) 
702                    (Just tycon) noSrcLoc
703
704 methName :: Name -> FastString -> Unique -> Name
705 methName cls occ uniq
706   = mkExternalName uniq (nameModule cls) (mkOccFS varName occ) 
707                    (Just cls) noSrcLoc
708 \end{code}
709
710 %************************************************************************
711 %*                                                                      *
712 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
713 %*                                                                      *
714 %************************************************************************
715 --MetaHaskell extension hand allocate keys here
716
717 \begin{code}
718 boundedClassKey         = mkPreludeClassUnique 1 
719 enumClassKey            = mkPreludeClassUnique 2 
720 eqClassKey              = mkPreludeClassUnique 3 
721 floatingClassKey        = mkPreludeClassUnique 5 
722 fractionalClassKey      = mkPreludeClassUnique 6 
723 integralClassKey        = mkPreludeClassUnique 7 
724 monadClassKey           = mkPreludeClassUnique 8 
725 dataClassKey            = mkPreludeClassUnique 9
726 functorClassKey         = mkPreludeClassUnique 10
727 numClassKey             = mkPreludeClassUnique 11
728 ordClassKey             = mkPreludeClassUnique 12
729 readClassKey            = mkPreludeClassUnique 13
730 realClassKey            = mkPreludeClassUnique 14
731 realFloatClassKey       = mkPreludeClassUnique 15
732 realFracClassKey        = mkPreludeClassUnique 16
733 showClassKey            = mkPreludeClassUnique 17
734 ixClassKey              = mkPreludeClassUnique 18
735
736 typeableClassKey        = mkPreludeClassUnique 20
737 typeable1ClassKey       = mkPreludeClassUnique 21
738 typeable2ClassKey       = mkPreludeClassUnique 22
739 typeable3ClassKey       = mkPreludeClassUnique 23
740 typeable4ClassKey       = mkPreludeClassUnique 24
741 typeable5ClassKey       = mkPreludeClassUnique 25
742 typeable6ClassKey       = mkPreludeClassUnique 26
743 typeable7ClassKey       = mkPreludeClassUnique 27
744 \end{code}
745
746 %************************************************************************
747 %*                                                                      *
748 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
749 %*                                                                      *
750 %************************************************************************
751
752 \begin{code}
753 addrPrimTyConKey                        = mkPreludeTyConUnique  1
754 addrTyConKey                            = mkPreludeTyConUnique  2
755 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
756 boolTyConKey                            = mkPreludeTyConUnique  4
757 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
758 charPrimTyConKey                        = mkPreludeTyConUnique  7
759 charTyConKey                            = mkPreludeTyConUnique  8
760 doublePrimTyConKey                      = mkPreludeTyConUnique  9
761 doubleTyConKey                          = mkPreludeTyConUnique 10 
762 floatPrimTyConKey                       = mkPreludeTyConUnique 11
763 floatTyConKey                           = mkPreludeTyConUnique 12
764 funTyConKey                             = mkPreludeTyConUnique 13
765 intPrimTyConKey                         = mkPreludeTyConUnique 14
766 intTyConKey                             = mkPreludeTyConUnique 15
767 int8TyConKey                            = mkPreludeTyConUnique 16
768 int16TyConKey                           = mkPreludeTyConUnique 17
769 int32PrimTyConKey                       = mkPreludeTyConUnique 18
770 int32TyConKey                           = mkPreludeTyConUnique 19
771 int64PrimTyConKey                       = mkPreludeTyConUnique 20
772 int64TyConKey                           = mkPreludeTyConUnique 21
773 integerTyConKey                         = mkPreludeTyConUnique 22
774 listTyConKey                            = mkPreludeTyConUnique 23
775 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
776 weakPrimTyConKey                        = mkPreludeTyConUnique 27
777 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
778 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
779 orderingTyConKey                        = mkPreludeTyConUnique 30
780 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
781 ratioTyConKey                           = mkPreludeTyConUnique 32
782 rationalTyConKey                        = mkPreludeTyConUnique 33
783 realWorldTyConKey                       = mkPreludeTyConUnique 34
784 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
785 stablePtrTyConKey                       = mkPreludeTyConUnique 36
786 statePrimTyConKey                       = mkPreludeTyConUnique 50
787 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
788 stableNameTyConKey                      = mkPreludeTyConUnique 52
789 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
790 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
791 ioTyConKey                              = mkPreludeTyConUnique 56
792 byteArrayTyConKey                       = mkPreludeTyConUnique 57
793 wordPrimTyConKey                        = mkPreludeTyConUnique 58
794 wordTyConKey                            = mkPreludeTyConUnique 59
795 word8TyConKey                           = mkPreludeTyConUnique 60
796 word16TyConKey                          = mkPreludeTyConUnique 61 
797 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
798 word32TyConKey                          = mkPreludeTyConUnique 63
799 word64PrimTyConKey                      = mkPreludeTyConUnique 64
800 word64TyConKey                          = mkPreludeTyConUnique 65
801 liftedConKey                            = mkPreludeTyConUnique 66
802 unliftedConKey                          = mkPreludeTyConUnique 67
803 anyBoxConKey                            = mkPreludeTyConUnique 68
804 kindConKey                              = mkPreludeTyConUnique 69
805 boxityConKey                            = mkPreludeTyConUnique 70
806 typeConKey                              = mkPreludeTyConUnique 71
807 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
808 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
809 ptrTyConKey                             = mkPreludeTyConUnique 74
810 funPtrTyConKey                          = mkPreludeTyConUnique 75
811
812 -- Generic Type Constructors
813 crossTyConKey                           = mkPreludeTyConUnique 79
814 plusTyConKey                            = mkPreludeTyConUnique 80
815 genUnitTyConKey                         = mkPreludeTyConUnique 81
816
817 -- Parallel array type constructor
818 parrTyConKey                            = mkPreludeTyConUnique 82
819
820 -- dotnet interop
821 objectTyConKey                          = mkPreludeTyConUnique 83
822
823 eitherTyConKey                          = mkPreludeTyConUnique 84
824
825 ---------------- Template Haskell -------------------
826 --      USES TyConUniques 100-119
827 -----------------------------------------------------
828
829 unitTyConKey = mkTupleTyConUnique Boxed 0
830 \end{code}
831
832 %************************************************************************
833 %*                                                                      *
834 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
835 %*                                                                      *
836 %************************************************************************
837
838 \begin{code}
839 charDataConKey                          = mkPreludeDataConUnique  1
840 consDataConKey                          = mkPreludeDataConUnique  2
841 doubleDataConKey                        = mkPreludeDataConUnique  3
842 falseDataConKey                         = mkPreludeDataConUnique  4
843 floatDataConKey                         = mkPreludeDataConUnique  5
844 intDataConKey                           = mkPreludeDataConUnique  6
845 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
846 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
847 nilDataConKey                           = mkPreludeDataConUnique 11
848 ratioDataConKey                         = mkPreludeDataConUnique 12
849 stableNameDataConKey                    = mkPreludeDataConUnique 14
850 trueDataConKey                          = mkPreludeDataConUnique 15
851 wordDataConKey                          = mkPreludeDataConUnique 16
852 ioDataConKey                            = mkPreludeDataConUnique 17
853
854 -- Generic data constructors
855 crossDataConKey                         = mkPreludeDataConUnique 20
856 inlDataConKey                           = mkPreludeDataConUnique 21
857 inrDataConKey                           = mkPreludeDataConUnique 22
858 genUnitDataConKey                       = mkPreludeDataConUnique 23
859
860 -- Data constructor for parallel arrays
861 parrDataConKey                          = mkPreludeDataConUnique 24
862
863 leftDataConKey                          = mkPreludeDataConUnique 25
864 rightDataConKey                         = mkPreludeDataConUnique 26
865 \end{code}
866
867 %************************************************************************
868 %*                                                                      *
869 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
870 %*                                                                      *
871 %************************************************************************
872
873 \begin{code}
874 absentErrorIdKey              = mkPreludeMiscIdUnique  1
875 augmentIdKey                  = mkPreludeMiscIdUnique  3
876 appendIdKey                   = mkPreludeMiscIdUnique  4
877 buildIdKey                    = mkPreludeMiscIdUnique  5
878 errorIdKey                    = mkPreludeMiscIdUnique  6
879 foldlIdKey                    = mkPreludeMiscIdUnique  7
880 foldrIdKey                    = mkPreludeMiscIdUnique  8
881 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
882 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
883 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
884 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
885 integerZeroIdKey              = mkPreludeMiscIdUnique 13
886 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
887 seqIdKey                      = mkPreludeMiscIdUnique 15
888 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
889 eqStringIdKey                 = mkPreludeMiscIdUnique 17
890 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
891 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
892 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
893 parErrorIdKey                 = mkPreludeMiscIdUnique 21
894 parIdKey                      = mkPreludeMiscIdUnique 22
895 patErrorIdKey                 = mkPreludeMiscIdUnique 23
896 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
897 recConErrorIdKey              = mkPreludeMiscIdUnique 25
898 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
899 traceIdKey                    = mkPreludeMiscIdUnique 27
900 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
901 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
902 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
903 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
904
905 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
906 concatIdKey                   = mkPreludeMiscIdUnique 33
907 filterIdKey                   = mkPreludeMiscIdUnique 34
908 zipIdKey                      = mkPreludeMiscIdUnique 35
909 bindIOIdKey                   = mkPreludeMiscIdUnique 36
910 returnIOIdKey                 = mkPreludeMiscIdUnique 37
911 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
912 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
913 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
914 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
915 printIdKey                    = mkPreludeMiscIdUnique 43
916 failIOIdKey                   = mkPreludeMiscIdUnique 44
917 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
918 voidArgIdKey                  = mkPreludeMiscIdUnique 47
919 splitIdKey                    = mkPreludeMiscIdUnique 48
920 fstIdKey                      = mkPreludeMiscIdUnique 49
921 sndIdKey                      = mkPreludeMiscIdUnique 50
922 otherwiseIdKey                = mkPreludeMiscIdUnique 51
923 assertIdKey                   = mkPreludeMiscIdUnique 53
924 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
925
926 rootMainKey                   = mkPreludeMiscIdUnique 55
927 runMainKey                    = mkPreludeMiscIdUnique 56
928
929 andIdKey                      = mkPreludeMiscIdUnique 57
930 orIdKey                       = mkPreludeMiscIdUnique 58
931 thenIOIdKey                   = mkPreludeMiscIdUnique 59
932 lazyIdKey                     = mkPreludeMiscIdUnique 60
933 assertErrorIdKey              = mkPreludeMiscIdUnique 61
934
935 -- Parallel array functions
936 nullPIdKey                    = mkPreludeMiscIdUnique 80
937 lengthPIdKey                  = mkPreludeMiscIdUnique 81
938 replicatePIdKey               = mkPreludeMiscIdUnique 82
939 mapPIdKey                     = mkPreludeMiscIdUnique 83
940 filterPIdKey                  = mkPreludeMiscIdUnique 84
941 zipPIdKey                     = mkPreludeMiscIdUnique 85
942 crossPIdKey                   = mkPreludeMiscIdUnique 86
943 indexPIdKey                   = mkPreludeMiscIdUnique 87
944 toPIdKey                      = mkPreludeMiscIdUnique 88
945 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
946 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
947 bpermutePIdKey                = mkPreludeMiscIdUnique 91
948 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
949 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
950
951 -- dotnet interop
952 unmarshalObjectIdKey          = mkPreludeMiscIdUnique 94
953 marshalObjectIdKey            = mkPreludeMiscIdUnique 95
954 marshalStringIdKey            = mkPreludeMiscIdUnique 96
955 unmarshalStringIdKey          = mkPreludeMiscIdUnique 97
956 checkDotnetResNameIdKey       = mkPreludeMiscIdUnique 98
957
958 \end{code}
959
960 Certain class operations from Prelude classes.  They get their own
961 uniques so we can look them up easily when we want to conjure them up
962 during type checking.
963
964 \begin{code}
965         -- Just a place holder for  unbound variables  produced by the renamer:
966 unboundKey                    = mkPreludeMiscIdUnique 101 
967
968 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
969 minusClassOpKey               = mkPreludeMiscIdUnique 103
970 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
971 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
972 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
973 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
974 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
975 eqClassOpKey                  = mkPreludeMiscIdUnique 109
976 geClassOpKey                  = mkPreludeMiscIdUnique 110
977 negateClassOpKey              = mkPreludeMiscIdUnique 111
978 failMClassOpKey               = mkPreludeMiscIdUnique 112
979 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
980 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
981 returnMClassOpKey             = mkPreludeMiscIdUnique 117
982
983 -- Recursive do notation
984 mfixIdKey       = mkPreludeMiscIdUnique 118
985
986 -- Arrow notation
987 arrAIdKey       = mkPreludeMiscIdUnique 119
988 composeAIdKey   = mkPreludeMiscIdUnique 120 -- >>>
989 firstAIdKey     = mkPreludeMiscIdUnique 121
990 appAIdKey       = mkPreludeMiscIdUnique 122
991 choiceAIdKey    = mkPreludeMiscIdUnique 123 -- |||
992 loopAIdKey      = mkPreludeMiscIdUnique 124
993
994 ---------------- Template Haskell -------------------
995 --      USES IdUniques 200-399
996 -----------------------------------------------------
997 \end{code}
998
999
1000 %************************************************************************
1001 %*                                                                      *
1002 \subsection{Standard groups of types}
1003 %*                                                                      *
1004 %************************************************************************
1005
1006 \begin{code}
1007 numericTyKeys = 
1008         [ addrTyConKey
1009         , wordTyConKey
1010         , intTyConKey
1011         , integerTyConKey
1012         , doubleTyConKey
1013         , floatTyConKey
1014         ]
1015
1016         -- Renamer always imports these data decls replete with constructors
1017         -- so that desugarer can always see their constructors.  Ugh!
1018 cCallishTyKeys = 
1019         [ addrTyConKey
1020         , wordTyConKey
1021         , byteArrayTyConKey
1022         , mutableByteArrayTyConKey
1023         , stablePtrTyConKey
1024         , int8TyConKey
1025         , int16TyConKey
1026         , int32TyConKey
1027         , int64TyConKey
1028         , word8TyConKey
1029         , word16TyConKey
1030         , word32TyConKey
1031         , word64TyConKey
1032         ]
1033 \end{code}
1034
1035
1036 %************************************************************************
1037 %*                                                                      *
1038 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1039 %*                                                                      *
1040 %************************************************************************
1041
1042 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1043 even though every numeric class has these two as a superclass,
1044 because the list of ambiguous dictionaries hasn't been simplified.
1045
1046 \begin{code}
1047 numericClassKeys =
1048         [ numClassKey
1049         , realClassKey
1050         , integralClassKey
1051         ]
1052         ++ fractionalClassKeys
1053
1054 fractionalClassKeys = 
1055         [ fractionalClassKey
1056         , floatingClassKey
1057         , realFracClassKey
1058         , realFloatClassKey
1059         ]
1060
1061         -- the strictness analyser needs to know about numeric types
1062         -- (see SaAbsInt.lhs)
1063 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1064         [ readClassKey
1065         ]
1066
1067 standardClassKeys = derivableClassKeys ++ numericClassKeys
1068
1069 noDictClassKeys = [] -- ToDo: remove?
1070 \end{code}
1071
1072 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1073 (@TcDeriv@).
1074
1075 \begin{code}
1076 derivableClassKeys
1077   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1078       boundedClassKey, showClassKey, readClassKey ]
1079 \end{code}
1080