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