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