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