A radical overhaul of the coercion infrastucture
[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
53 import OccName
54 import RdrName    ( RdrName, nameRdrName, mkOrig, rdrNameOcc, mkUnqual )
55 import Unique     ( Unique, Uniquable(..), hasKey,
56                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
57                     mkPreludeTyConUnique, mkPreludeClassUnique,
58                     mkTupleTyConUnique
59                   ) 
60 import BasicTypes ( Boxity(..), Arity )
61 import Name       ( Name, mkInternalName, mkExternalName )
62 import SrcLoc
63 import FastString
64 \end{code}
65
66
67 %************************************************************************
68 %*                                                                      *
69 \subsection{Local Names}
70 %*                                                                      *
71 %************************************************************************
72
73 This *local* name is used by the interactive stuff
74
75 \begin{code}
76 itName :: Unique -> Name
77 itName uniq = mkInternalName uniq (mkOccNameFS varName (fsLit "it")) noSrcSpan
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) noSrcSpan
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         stringTyConName,
112         ratioDataConName,
113         ratioTyConName,
114         integerTyConName, smallIntegerName,
115
116         --  Classes.  *Must* include:
117         --      classes that are grabbed by key (e.g., eqClassKey)
118         --      classes in "Class.standardClassKeys" (quite a few)
119         eqClassName,                    -- mentioned, derivable
120         ordClassName,                   -- derivable
121         boundedClassName,               -- derivable
122         numClassName,                   -- mentioned, numeric
123         enumClassName,                  -- derivable
124         monadClassName,
125         functorClassName,
126         realClassName,                  -- numeric
127         integralClassName,              -- numeric
128         fractionalClassName,            -- numeric
129         floatingClassName,              -- numeric
130         realFracClassName,              -- numeric
131         realFloatClassName,             -- numeric
132         dataClassName, 
133         isStringClassName,
134         applicativeClassName,
135         foldableClassName,
136         traversableClassName,
137
138         -- Numeric stuff
139         negateName, minusName, 
140         fromRationalName, fromIntegerName, 
141         geName, eqName, 
142
143         -- String stuff
144         fromStringName,
145         
146         -- Enum stuff
147         enumFromName, enumFromThenName, 
148         enumFromThenToName, enumFromToName,
149         enumFromToPName, enumFromThenToPName,
150
151         -- Monad stuff
152         thenIOName, bindIOName, returnIOName, failIOName,
153         failMName, bindMName, thenMName, returnMName,
154
155         -- MonadRec stuff
156         mfixName,
157
158         -- Arrow stuff
159         arrAName, composeAName, firstAName,
160         appAName, choiceAName, loopAName,
161
162         -- Ix stuff
163         ixClassName, 
164
165         -- Show stuff
166         showClassName, 
167
168         -- Read stuff
169         readClassName, 
170
171         -- Stable pointers
172         newStablePtrName,
173
174     -- GHC Extensions
175     groupWithName,
176
177         -- Strings and lists
178         unpackCStringName, unpackCStringAppendName,
179         unpackCStringFoldrName, unpackCStringUtf8Name,
180
181         -- List operations
182         concatName, filterName, mapName,
183         zipName, foldrName, buildName, augmentName, appendName,
184
185         -- Parallel array operations
186         nullPName, lengthPName, replicatePName, singletonPName, mapPName,
187         filterPName, zipPName, crossMapPName, indexPName,
188         toPName, emptyPName, appPName,
189
190         -- FFI primitive types that are not wired-in.
191         stablePtrTyConName, ptrTyConName, funPtrTyConName,
192         int8TyConName, int16TyConName, int32TyConName, int64TyConName,
193         wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
194
195         -- Others
196         otherwiseIdName, inlineIdName,
197         plusIntegerName, timesIntegerName,
198         eqStringName, assertName, breakpointName, breakpointCondName,
199         breakpointAutoName,  opaqueTyConName,
200         assertErrorName, runSTRepName,
201         printName, fstName, sndName,
202
203         -- MonadFix
204         monadFixClassName, mfixName,
205
206         -- Other classes
207         randomClassName, randomGenClassName, monadPlusClassName,
208
209         -- Annotation type checking
210         toAnnotationWrapperName
211
212         -- The Either type
213         , eitherTyConName, leftDataConName, rightDataConName
214
215         -- dotnet interop
216         , objectTyConName, marshalObjectName, unmarshalObjectName
217         , marshalStringName, unmarshalStringName, checkDotnetResName
218     ]
219
220 genericTyConNames :: [Name]
221 genericTyConNames = [crossTyConName, plusTyConName, genUnitTyConName]
222 \end{code}
223
224
225 %************************************************************************
226 %*                                                                      *
227 \subsection{Module names}
228 %*                                                                      *
229 %************************************************************************
230
231
232 --MetaHaskell Extension Add a new module here
233 \begin{code}
234 pRELUDE :: Module
235 pRELUDE         = mkBaseModule_ pRELUDE_NAME
236
237 gHC_PRIM, gHC_TYPES, gHC_BOOL, gHC_UNIT, gHC_ORDERING, gHC_GENERICS, gHC_CLASSES, gHC_BASE, gHC_ENUM,
238     gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER, gHC_INTEGER_TYPE, gHC_LIST, gHC_PARR,
239     gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING, dATA_FOLDABLE, dATA_TRAVERSABLE,
240     gHC_PACK, gHC_CONC, gHC_IO, gHC_IO_Exception,
241     gHC_ST, gHC_ARR, gHC_STABLE, gHC_ADDR, gHC_PTR, gHC_ERR, gHC_REAL,
242     gHC_FLOAT, gHC_TOP_HANDLER, sYSTEM_IO, dYNAMIC, tYPEABLE, gENERICS,
243     dOTNET, rEAD_PREC, lEX, gHC_INT, gHC_WORD, mONAD, mONAD_FIX, aRROW, cONTROL_APPLICATIVE,
244     gHC_DESUGAR, rANDOM, gHC_EXTS, cONTROL_EXCEPTION_BASE :: Module
245
246 gHC_PRIM        = mkPrimModule (fsLit "GHC.Prim")   -- Primitive types and values
247 gHC_TYPES       = mkPrimModule (fsLit "GHC.Types")
248 gHC_UNIT        = mkPrimModule (fsLit "GHC.Unit")
249 gHC_BOOL        = mkPrimModule (fsLit "GHC.Bool")
250 gHC_ORDERING    = mkPrimModule (fsLit "GHC.Ordering")
251 gHC_GENERICS    = mkPrimModule (fsLit "GHC.Generics")
252
253 gHC_CLASSES     = mkBaseModule (fsLit "GHC.Classes")
254 gHC_BASE        = mkBaseModule (fsLit "GHC.Base")
255 gHC_ENUM        = mkBaseModule (fsLit "GHC.Enum")
256 gHC_SHOW        = mkBaseModule (fsLit "GHC.Show")
257 gHC_READ        = mkBaseModule (fsLit "GHC.Read")
258 gHC_NUM         = mkBaseModule (fsLit "GHC.Num")
259 gHC_INTEGER     = mkIntegerModule (fsLit "GHC.Integer")
260 gHC_INTEGER_TYPE= mkIntegerModule (fsLit "GHC.Integer.Type")
261 gHC_LIST        = mkBaseModule (fsLit "GHC.List")
262 gHC_PARR        = mkBaseModule (fsLit "GHC.PArr")
263 gHC_TUPLE       = mkPrimModule (fsLit "GHC.Tuple")
264 dATA_TUPLE      = mkBaseModule (fsLit "Data.Tuple")
265 dATA_EITHER     = mkBaseModule (fsLit "Data.Either")
266 dATA_STRING     = mkBaseModule (fsLit "Data.String")
267 dATA_FOLDABLE   = mkBaseModule (fsLit "Data.Foldable")
268 dATA_TRAVERSABLE= mkBaseModule (fsLit "Data.Traversable")
269 gHC_PACK        = mkBaseModule (fsLit "GHC.Pack")
270 gHC_CONC        = mkBaseModule (fsLit "GHC.Conc")
271 gHC_IO          = mkBaseModule (fsLit "GHC.IO")
272 gHC_IO_Exception = mkBaseModule (fsLit "GHC.IO.Exception")
273 gHC_ST          = mkBaseModule (fsLit "GHC.ST")
274 gHC_ARR         = mkBaseModule (fsLit "GHC.Arr")
275 gHC_STABLE      = mkBaseModule (fsLit "GHC.Stable")
276 gHC_ADDR        = mkBaseModule (fsLit "GHC.Addr")
277 gHC_PTR         = mkBaseModule (fsLit "GHC.Ptr")
278 gHC_ERR         = mkBaseModule (fsLit "GHC.Err")
279 gHC_REAL        = mkBaseModule (fsLit "GHC.Real")
280 gHC_FLOAT       = mkBaseModule (fsLit "GHC.Float")
281 gHC_TOP_HANDLER = mkBaseModule (fsLit "GHC.TopHandler")
282 sYSTEM_IO       = mkBaseModule (fsLit "System.IO")
283 dYNAMIC         = mkBaseModule (fsLit "Data.Dynamic")
284 tYPEABLE        = mkBaseModule (fsLit "Data.Typeable")
285 gENERICS        = mkBaseModule (fsLit "Data.Data")
286 dOTNET          = mkBaseModule (fsLit "GHC.Dotnet")
287 rEAD_PREC       = mkBaseModule (fsLit "Text.ParserCombinators.ReadPrec")
288 lEX             = mkBaseModule (fsLit "Text.Read.Lex")
289 gHC_INT         = mkBaseModule (fsLit "GHC.Int")
290 gHC_WORD        = mkBaseModule (fsLit "GHC.Word")
291 mONAD           = mkBaseModule (fsLit "Control.Monad")
292 mONAD_FIX       = mkBaseModule (fsLit "Control.Monad.Fix")
293 aRROW           = mkBaseModule (fsLit "Control.Arrow")
294 cONTROL_APPLICATIVE = mkBaseModule (fsLit "Control.Applicative")
295 gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
296 rANDOM          = mkBaseModule (fsLit "System.Random")
297 gHC_EXTS        = mkBaseModule (fsLit "GHC.Exts")
298 cONTROL_EXCEPTION_BASE = mkBaseModule (fsLit "Control.Exception.Base")
299
300 mAIN, rOOT_MAIN :: Module
301 mAIN            = mkMainModule_ mAIN_NAME
302 rOOT_MAIN       = mkMainModule (fsLit ":Main") -- Root module for initialisation 
303
304         -- The ':xxx' makes a module name that the user can never
305         -- use himself.  The z-encoding for ':' is "ZC", so the z-encoded
306         -- module name still starts with a capital letter, which keeps
307         -- the z-encoded version consistent.
308 iNTERACTIVE :: Module
309 iNTERACTIVE    = mkMainModule (fsLit ":Interactive")
310
311 pRELUDE_NAME, mAIN_NAME :: ModuleName
312 pRELUDE_NAME   = mkModuleNameFS (fsLit "Prelude")
313 mAIN_NAME      = mkModuleNameFS (fsLit "Main")
314
315 mkPrimModule :: FastString -> Module
316 mkPrimModule m = mkModule primPackageId (mkModuleNameFS m)
317
318 mkIntegerModule :: FastString -> Module
319 mkIntegerModule m = mkModule integerPackageId (mkModuleNameFS m)
320
321 mkBaseModule :: FastString -> Module
322 mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
323
324 mkBaseModule_ :: ModuleName -> Module
325 mkBaseModule_ m = mkModule basePackageId m
326
327 mkMainModule :: FastString -> Module
328 mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
329
330 mkMainModule_ :: ModuleName -> Module
331 mkMainModule_ m = mkModule mainPackageId m
332 \end{code}
333
334 %************************************************************************
335 %*                                                                      *
336 \subsection{Constructing the names of tuples
337 %*                                                                      *
338 %************************************************************************
339
340 \begin{code}
341 mkTupleModule :: Boxity -> Arity -> Module
342 mkTupleModule Boxed   0 = gHC_UNIT
343 mkTupleModule Boxed   _ = gHC_TUPLE
344 mkTupleModule Unboxed _ = gHC_PRIM
345 \end{code}
346
347
348 %************************************************************************
349 %*                                                                      *
350                         RdrNames
351 %*                                                                      *
352 %************************************************************************
353
354 \begin{code}
355 main_RDR_Unqual    :: RdrName
356 main_RDR_Unqual = mkUnqual varName (fsLit "main")
357         -- We definitely don't want an Orig RdrName, because
358         -- main might, in principle, be imported into module Main
359
360 forall_tv_RDR, dot_tv_RDR :: RdrName
361 forall_tv_RDR = mkUnqual tvName (fsLit "forall")
362 dot_tv_RDR    = mkUnqual tvName (fsLit ".")
363
364 eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
365     ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
366 eq_RDR                  = nameRdrName eqName
367 ge_RDR                  = nameRdrName geName
368 ne_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "/=")
369 le_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<=") 
370 lt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<") 
371 gt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit ">")  
372 compare_RDR             = varQual_RDR  gHC_CLASSES (fsLit "compare") 
373 ltTag_RDR               = dataQual_RDR gHC_ORDERING (fsLit "LT") 
374 eqTag_RDR               = dataQual_RDR gHC_ORDERING (fsLit "EQ")
375 gtTag_RDR               = dataQual_RDR gHC_ORDERING (fsLit "GT")
376
377 eqClass_RDR, numClass_RDR, ordClass_RDR, enumClass_RDR, monadClass_RDR
378     :: RdrName
379 eqClass_RDR             = nameRdrName eqClassName
380 numClass_RDR            = nameRdrName numClassName
381 ordClass_RDR            = nameRdrName ordClassName
382 enumClass_RDR           = nameRdrName enumClassName
383 monadClass_RDR          = nameRdrName monadClassName
384
385 map_RDR, append_RDR :: RdrName
386 map_RDR                 = varQual_RDR gHC_BASE (fsLit "map")
387 append_RDR              = varQual_RDR gHC_BASE (fsLit "++")
388
389 foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR :: RdrName
390 foldr_RDR               = nameRdrName foldrName
391 build_RDR               = nameRdrName buildName
392 returnM_RDR             = nameRdrName returnMName
393 bindM_RDR               = nameRdrName bindMName
394 failM_RDR               = nameRdrName failMName
395
396 left_RDR, right_RDR :: RdrName
397 left_RDR                = nameRdrName leftDataConName
398 right_RDR               = nameRdrName rightDataConName
399
400 fromEnum_RDR, toEnum_RDR :: RdrName
401 fromEnum_RDR            = varQual_RDR gHC_ENUM (fsLit "fromEnum")
402 toEnum_RDR              = varQual_RDR gHC_ENUM (fsLit "toEnum")
403
404 enumFrom_RDR, enumFromTo_RDR, enumFromThen_RDR, enumFromThenTo_RDR :: RdrName
405 enumFrom_RDR            = nameRdrName enumFromName
406 enumFromTo_RDR          = nameRdrName enumFromToName
407 enumFromThen_RDR        = nameRdrName enumFromThenName
408 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
409
410 ratioDataCon_RDR, plusInteger_RDR, timesInteger_RDR :: RdrName
411 ratioDataCon_RDR        = nameRdrName ratioDataConName
412 plusInteger_RDR         = nameRdrName plusIntegerName
413 timesInteger_RDR        = nameRdrName timesIntegerName
414
415 ioDataCon_RDR :: RdrName
416 ioDataCon_RDR           = nameRdrName ioDataConName
417
418 eqString_RDR, unpackCString_RDR, unpackCStringFoldr_RDR,
419     unpackCStringUtf8_RDR :: RdrName
420 eqString_RDR            = nameRdrName eqStringName
421 unpackCString_RDR       = nameRdrName unpackCStringName
422 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
423 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
424
425 newStablePtr_RDR, wordDataCon_RDR :: RdrName
426 newStablePtr_RDR        = nameRdrName newStablePtrName
427 wordDataCon_RDR         = dataQual_RDR gHC_WORD (fsLit "W#")
428
429 bindIO_RDR, returnIO_RDR :: RdrName
430 bindIO_RDR              = nameRdrName bindIOName
431 returnIO_RDR            = nameRdrName returnIOName
432
433 fromInteger_RDR, fromRational_RDR, minus_RDR, times_RDR, plus_RDR :: RdrName
434 fromInteger_RDR         = nameRdrName fromIntegerName
435 fromRational_RDR        = nameRdrName fromRationalName
436 minus_RDR               = nameRdrName minusName
437 times_RDR               = varQual_RDR  gHC_NUM (fsLit "*")
438 plus_RDR                = varQual_RDR gHC_NUM (fsLit "+")
439
440 fromString_RDR :: RdrName
441 fromString_RDR          = nameRdrName fromStringName
442
443 compose_RDR :: RdrName
444 compose_RDR             = varQual_RDR gHC_BASE (fsLit ".")
445
446 not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
447     and_RDR, range_RDR, inRange_RDR, index_RDR,
448     unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
449 and_RDR                 = varQual_RDR gHC_CLASSES (fsLit "&&")
450 not_RDR                 = varQual_RDR gHC_CLASSES (fsLit "not")
451 getTag_RDR              = varQual_RDR gHC_BASE (fsLit "getTag")
452 succ_RDR                = varQual_RDR gHC_ENUM (fsLit "succ")
453 pred_RDR                = varQual_RDR gHC_ENUM (fsLit "pred")
454 minBound_RDR            = varQual_RDR gHC_ENUM (fsLit "minBound")
455 maxBound_RDR            = varQual_RDR gHC_ENUM (fsLit "maxBound")
456 range_RDR               = varQual_RDR gHC_ARR (fsLit "range")
457 inRange_RDR             = varQual_RDR gHC_ARR (fsLit "inRange")
458 index_RDR               = varQual_RDR gHC_ARR (fsLit "index")
459 unsafeIndex_RDR         = varQual_RDR gHC_ARR (fsLit "unsafeIndex")
460 unsafeRangeSize_RDR     = varQual_RDR gHC_ARR (fsLit "unsafeRangeSize")
461
462 readList_RDR, readListDefault_RDR, readListPrec_RDR, readListPrecDefault_RDR,
463     readPrec_RDR, parens_RDR, choose_RDR, lexP_RDR :: RdrName
464 readList_RDR            = varQual_RDR gHC_READ (fsLit "readList")
465 readListDefault_RDR     = varQual_RDR gHC_READ (fsLit "readListDefault")
466 readListPrec_RDR        = varQual_RDR gHC_READ (fsLit "readListPrec")
467 readListPrecDefault_RDR = varQual_RDR gHC_READ (fsLit "readListPrecDefault")
468 readPrec_RDR            = varQual_RDR gHC_READ (fsLit "readPrec")
469 parens_RDR              = varQual_RDR gHC_READ (fsLit "parens")
470 choose_RDR              = varQual_RDR gHC_READ (fsLit "choose")
471 lexP_RDR                = varQual_RDR gHC_READ (fsLit "lexP")
472
473 punc_RDR, ident_RDR, symbol_RDR :: RdrName
474 punc_RDR                = dataQual_RDR lEX (fsLit "Punc")
475 ident_RDR               = dataQual_RDR lEX (fsLit "Ident")
476 symbol_RDR              = dataQual_RDR lEX (fsLit "Symbol")
477
478 step_RDR, alt_RDR, reset_RDR, prec_RDR :: RdrName
479 step_RDR                = varQual_RDR  rEAD_PREC (fsLit "step")
480 alt_RDR                 = varQual_RDR  rEAD_PREC (fsLit "+++") 
481 reset_RDR               = varQual_RDR  rEAD_PREC (fsLit "reset")
482 prec_RDR                = varQual_RDR  rEAD_PREC (fsLit "prec")
483
484 showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR,
485     showSpace_RDR, showParen_RDR :: RdrName
486 showList_RDR            = varQual_RDR gHC_SHOW (fsLit "showList")
487 showList___RDR          = varQual_RDR gHC_SHOW (fsLit "showList__")
488 showsPrec_RDR           = varQual_RDR gHC_SHOW (fsLit "showsPrec") 
489 showString_RDR          = varQual_RDR gHC_SHOW (fsLit "showString")
490 showSpace_RDR           = varQual_RDR gHC_SHOW (fsLit "showSpace") 
491 showParen_RDR           = varQual_RDR gHC_SHOW (fsLit "showParen") 
492
493 typeOf_RDR, mkTypeRep_RDR, mkTyConRep_RDR :: RdrName
494 typeOf_RDR     = varQual_RDR tYPEABLE (fsLit "typeOf")
495 mkTypeRep_RDR  = varQual_RDR tYPEABLE (fsLit "mkTyConApp")
496 mkTyConRep_RDR = varQual_RDR tYPEABLE (fsLit "mkTyCon")
497
498 undefined_RDR :: RdrName
499 undefined_RDR = varQual_RDR gHC_ERR (fsLit "undefined")
500
501 crossDataCon_RDR, inlDataCon_RDR, inrDataCon_RDR, genUnitDataCon_RDR :: RdrName
502 crossDataCon_RDR   = dataQual_RDR gHC_GENERICS (fsLit ":*:")
503 inlDataCon_RDR     = dataQual_RDR gHC_GENERICS (fsLit "Inl")
504 inrDataCon_RDR     = dataQual_RDR gHC_GENERICS (fsLit "Inr")
505 genUnitDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "Unit")
506
507 fmap_RDR, pure_RDR, ap_RDR, foldable_foldr_RDR, traverse_RDR :: RdrName
508 fmap_RDR                = varQual_RDR gHC_BASE (fsLit "fmap")
509 pure_RDR                = varQual_RDR cONTROL_APPLICATIVE (fsLit "pure")
510 ap_RDR                  = varQual_RDR cONTROL_APPLICATIVE (fsLit "<*>")
511 foldable_foldr_RDR      = varQual_RDR dATA_FOLDABLE       (fsLit "foldr")
512 traverse_RDR            = varQual_RDR dATA_TRAVERSABLE    (fsLit "traverse")
513
514 ----------------------
515 varQual_RDR, tcQual_RDR, clsQual_RDR, dataQual_RDR
516     :: Module -> FastString -> RdrName
517 varQual_RDR  mod str = mkOrig mod (mkOccNameFS varName str)
518 tcQual_RDR   mod str = mkOrig mod (mkOccNameFS tcName str)
519 clsQual_RDR  mod str = mkOrig mod (mkOccNameFS clsName str)
520 dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
521 \end{code}
522
523 %************************************************************************
524 %*                                                                      *
525 \subsection{Known-key names}
526 %*                                                                      *
527 %************************************************************************
528
529 Many of these Names are not really "built in", but some parts of the
530 compiler (notably the deriving mechanism) need to mention their names,
531 and it's convenient to write them all down in one place.
532
533 --MetaHaskell Extension  add the constrs and the lower case case
534 -- guys as well (perhaps) e.g. see  trueDataConName     below
535
536
537 \begin{code}
538 runMainIOName :: Name
539 runMainIOName = varQual gHC_TOP_HANDLER (fsLit "runMainIO") runMainKey
540
541 orderingTyConName :: Name
542 orderingTyConName = tcQual   gHC_ORDERING (fsLit "Ordering") orderingTyConKey
543
544 eitherTyConName, leftDataConName, rightDataConName :: Name
545 eitherTyConName   = tcQual  dATA_EITHER (fsLit "Either") eitherTyConKey
546 leftDataConName   = conName dATA_EITHER (fsLit "Left")   leftDataConKey
547 rightDataConName  = conName dATA_EITHER (fsLit "Right")  rightDataConKey
548
549 -- Generics
550 crossTyConName, plusTyConName, genUnitTyConName :: Name
551 crossTyConName     = tcQual   gHC_GENERICS (fsLit ":*:") crossTyConKey
552 plusTyConName      = tcQual   gHC_GENERICS (fsLit ":+:") plusTyConKey
553 genUnitTyConName   = tcQual   gHC_GENERICS (fsLit "Unit") genUnitTyConKey
554
555 -- Base strings Strings
556 unpackCStringName, unpackCStringAppendName, unpackCStringFoldrName,
557     unpackCStringUtf8Name, eqStringName, stringTyConName :: Name
558 unpackCStringName       = varQual gHC_BASE (fsLit "unpackCString#") unpackCStringIdKey
559 unpackCStringAppendName = varQual gHC_BASE (fsLit "unpackAppendCString#") unpackCStringAppendIdKey
560 unpackCStringFoldrName  = varQual gHC_BASE (fsLit "unpackFoldrCString#") unpackCStringFoldrIdKey
561 unpackCStringUtf8Name   = varQual gHC_BASE (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
562 eqStringName            = varQual gHC_BASE (fsLit "eqString")  eqStringIdKey
563 stringTyConName         = tcQual  gHC_BASE (fsLit "String") stringTyConKey
564
565 -- The 'inline' function
566 inlineIdName :: Name
567 inlineIdName            = varQual gHC_BASE (fsLit "inline") inlineIdKey
568
569 -- Base classes (Eq, Ord, Functor)
570 eqClassName, eqName, ordClassName, geName, functorClassName :: Name
571 eqClassName       = clsQual  gHC_CLASSES (fsLit "Eq")      eqClassKey
572 eqName            = methName gHC_CLASSES (fsLit "==")      eqClassOpKey
573 ordClassName      = clsQual  gHC_CLASSES (fsLit "Ord")     ordClassKey
574 geName            = methName gHC_CLASSES (fsLit ">=")      geClassOpKey
575 functorClassName  = clsQual  gHC_BASE (fsLit "Functor") functorClassKey
576
577 -- Class Monad
578 monadClassName, thenMName, bindMName, returnMName, failMName :: Name
579 monadClassName     = clsQual  gHC_BASE (fsLit "Monad")  monadClassKey
580 thenMName          = methName gHC_BASE (fsLit ">>")     thenMClassOpKey
581 bindMName          = methName gHC_BASE (fsLit ">>=")    bindMClassOpKey
582 returnMName        = methName gHC_BASE (fsLit "return") returnMClassOpKey
583 failMName          = methName gHC_BASE (fsLit "fail")   failMClassOpKey
584
585 -- Classes (Applicative, Foldable, Traversable)
586 applicativeClassName, foldableClassName, traversableClassName :: Name
587 applicativeClassName  = clsQual  cONTROL_APPLICATIVE (fsLit "Applicative") applicativeClassKey
588 foldableClassName     = clsQual  dATA_FOLDABLE       (fsLit "Foldable")    foldableClassKey
589 traversableClassName  = clsQual  dATA_TRAVERSABLE    (fsLit "Traversable") traversableClassKey
590
591 -- Functions for GHC extensions
592 groupWithName :: Name
593 groupWithName = varQual gHC_EXTS (fsLit "groupWith") groupWithIdKey
594
595 -- Random PrelBase functions
596 fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
597     mapName, appendName, assertName,
598     breakpointName, breakpointCondName, breakpointAutoName,
599     opaqueTyConName :: Name
600 fromStringName = methName dATA_STRING (fsLit "fromString") fromStringClassOpKey
601 otherwiseIdName   = varQual gHC_BASE (fsLit "otherwise")  otherwiseIdKey
602 foldrName         = varQual gHC_BASE (fsLit "foldr")      foldrIdKey
603 buildName         = varQual gHC_BASE (fsLit "build")      buildIdKey
604 augmentName       = varQual gHC_BASE (fsLit "augment")    augmentIdKey
605 mapName       = varQual gHC_BASE (fsLit "map")        mapIdKey
606 appendName        = varQual gHC_BASE (fsLit "++")         appendIdKey
607 assertName        = varQual gHC_BASE (fsLit "assert")     assertIdKey
608 breakpointName    = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
609 breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
610 breakpointAutoName= varQual gHC_BASE (fsLit "breakpointAuto") breakpointAutoIdKey
611 opaqueTyConName   = tcQual  gHC_BASE (fsLit "Opaque")   opaqueTyConKey
612
613 breakpointJumpName :: Name
614 breakpointJumpName
615     = mkInternalName
616         breakpointJumpIdKey
617         (mkOccNameFS varName (fsLit "breakpointJump"))
618         noSrcSpan
619 breakpointCondJumpName :: Name
620 breakpointCondJumpName
621     = mkInternalName
622         breakpointCondJumpIdKey
623         (mkOccNameFS varName (fsLit "breakpointCondJump"))
624         noSrcSpan
625 breakpointAutoJumpName :: Name
626 breakpointAutoJumpName
627     = mkInternalName
628         breakpointAutoJumpIdKey
629         (mkOccNameFS varName (fsLit "breakpointAutoJump"))
630         noSrcSpan
631
632 -- PrelTup
633 fstName, sndName :: Name
634 fstName           = varQual dATA_TUPLE (fsLit "fst") fstIdKey
635 sndName           = varQual dATA_TUPLE (fsLit "snd") sndIdKey
636
637 -- Module PrelNum
638 numClassName, fromIntegerName, minusName, negateName, plusIntegerName,
639     timesIntegerName,
640     integerTyConName, smallIntegerName :: Name
641 numClassName      = clsQual  gHC_NUM (fsLit "Num") numClassKey
642 fromIntegerName   = methName gHC_NUM (fsLit "fromInteger") fromIntegerClassOpKey
643 minusName         = methName gHC_NUM (fsLit "-") minusClassOpKey
644 negateName        = methName gHC_NUM (fsLit "negate") negateClassOpKey
645 plusIntegerName   = varQual  gHC_INTEGER (fsLit "plusInteger") plusIntegerIdKey
646 timesIntegerName  = varQual  gHC_INTEGER (fsLit "timesInteger") timesIntegerIdKey
647 integerTyConName  = tcQual   gHC_INTEGER_TYPE (fsLit "Integer") integerTyConKey
648 smallIntegerName = varQual gHC_INTEGER (fsLit "smallInteger") smallIntegerIdKey
649
650 -- PrelReal types and classes
651 rationalTyConName, ratioTyConName, ratioDataConName, realClassName,
652     integralClassName, realFracClassName, fractionalClassName,
653     fromRationalName :: Name
654 rationalTyConName   = tcQual  gHC_REAL (fsLit "Rational") rationalTyConKey
655 ratioTyConName      = tcQual  gHC_REAL (fsLit "Ratio") ratioTyConKey
656 ratioDataConName    = conName gHC_REAL (fsLit ":%") ratioDataConKey
657 realClassName       = clsQual gHC_REAL (fsLit "Real") realClassKey
658 integralClassName   = clsQual gHC_REAL (fsLit "Integral") integralClassKey
659 realFracClassName   = clsQual gHC_REAL (fsLit "RealFrac") realFracClassKey
660 fractionalClassName = clsQual gHC_REAL (fsLit "Fractional") fractionalClassKey
661 fromRationalName    = methName gHC_REAL  (fsLit "fromRational") fromRationalClassOpKey
662
663 -- PrelFloat classes
664 floatingClassName, realFloatClassName :: Name
665 floatingClassName  = clsQual  gHC_FLOAT (fsLit "Floating") floatingClassKey
666 realFloatClassName = clsQual  gHC_FLOAT (fsLit "RealFloat") realFloatClassKey
667
668 -- Class Ix
669 ixClassName :: Name
670 ixClassName = clsQual gHC_ARR (fsLit "Ix") ixClassKey
671
672 -- Class Typeable
673 typeableClassName, typeable1ClassName, typeable2ClassName,
674     typeable3ClassName, typeable4ClassName, typeable5ClassName,
675     typeable6ClassName, typeable7ClassName :: Name
676 typeableClassName  = clsQual tYPEABLE (fsLit "Typeable") typeableClassKey
677 typeable1ClassName = clsQual tYPEABLE (fsLit "Typeable1") typeable1ClassKey
678 typeable2ClassName = clsQual tYPEABLE (fsLit "Typeable2") typeable2ClassKey
679 typeable3ClassName = clsQual tYPEABLE (fsLit "Typeable3") typeable3ClassKey
680 typeable4ClassName = clsQual tYPEABLE (fsLit "Typeable4") typeable4ClassKey
681 typeable5ClassName = clsQual tYPEABLE (fsLit "Typeable5") typeable5ClassKey
682 typeable6ClassName = clsQual tYPEABLE (fsLit "Typeable6") typeable6ClassKey
683 typeable7ClassName = clsQual tYPEABLE (fsLit "Typeable7") typeable7ClassKey
684
685 typeableClassNames :: [Name]
686 typeableClassNames =    [ typeableClassName, typeable1ClassName, typeable2ClassName
687                         , typeable3ClassName, typeable4ClassName, typeable5ClassName
688                         , typeable6ClassName, typeable7ClassName ]
689
690 -- Class Data
691 dataClassName :: Name
692 dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
693
694 -- Error module
695 assertErrorName    :: Name
696 assertErrorName   = varQual gHC_IO_Exception (fsLit "assertError") assertErrorIdKey
697
698 -- Enum module (Enum, Bounded)
699 enumClassName, enumFromName, enumFromToName, enumFromThenName,
700     enumFromThenToName, boundedClassName :: Name
701 enumClassName      = clsQual gHC_ENUM (fsLit "Enum") enumClassKey
702 enumFromName       = methName gHC_ENUM (fsLit "enumFrom") enumFromClassOpKey
703 enumFromToName     = methName gHC_ENUM (fsLit "enumFromTo") enumFromToClassOpKey
704 enumFromThenName   = methName gHC_ENUM (fsLit "enumFromThen") enumFromThenClassOpKey
705 enumFromThenToName = methName gHC_ENUM (fsLit "enumFromThenTo") enumFromThenToClassOpKey
706 boundedClassName   = clsQual gHC_ENUM (fsLit "Bounded") boundedClassKey
707
708 -- List functions
709 concatName, filterName, zipName :: Name
710 concatName        = varQual gHC_LIST (fsLit "concat") concatIdKey
711 filterName        = varQual gHC_LIST (fsLit "filter") filterIdKey
712 zipName           = varQual gHC_LIST (fsLit "zip") zipIdKey
713
714 -- Class Show
715 showClassName :: Name
716 showClassName     = clsQual gHC_SHOW (fsLit "Show")       showClassKey
717
718 -- Class Read
719 readClassName :: Name
720 readClassName      = clsQual gHC_READ (fsLit "Read") readClassKey
721
722 -- parallel array types and functions
723 enumFromToPName, enumFromThenToPName, nullPName, lengthPName,
724     singletonPName, replicatePName, mapPName, filterPName,
725     zipPName, crossMapPName, indexPName, toPName,
726     emptyPName, appPName :: Name
727 enumFromToPName    = varQual gHC_PARR (fsLit "enumFromToP") enumFromToPIdKey
728 enumFromThenToPName= varQual gHC_PARR (fsLit "enumFromThenToP") enumFromThenToPIdKey
729 nullPName         = varQual gHC_PARR (fsLit "nullP")             nullPIdKey
730 lengthPName       = varQual gHC_PARR (fsLit "lengthP")           lengthPIdKey
731 singletonPName    = varQual gHC_PARR (fsLit "singletonP")         singletonPIdKey
732 replicatePName    = varQual gHC_PARR (fsLit "replicateP")        replicatePIdKey
733 mapPName          = varQual gHC_PARR (fsLit "mapP")              mapPIdKey
734 filterPName       = varQual gHC_PARR (fsLit "filterP")           filterPIdKey
735 zipPName          = varQual gHC_PARR (fsLit "zipP")              zipPIdKey
736 crossMapPName     = varQual gHC_PARR (fsLit "crossMapP")         crossMapPIdKey
737 indexPName        = varQual gHC_PARR (fsLit "!:")                indexPIdKey
738 toPName           = varQual gHC_PARR (fsLit "toP")               toPIdKey
739 emptyPName        = varQual gHC_PARR (fsLit "emptyP")            emptyPIdKey
740 appPName          = varQual gHC_PARR (fsLit "+:+")               appPIdKey
741
742 -- IO things
743 ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
744     failIOName :: Name
745 ioTyConName       = tcQual  gHC_TYPES (fsLit "IO") ioTyConKey
746 ioDataConName     = conName gHC_TYPES (fsLit "IO") ioDataConKey
747 thenIOName        = varQual gHC_BASE (fsLit "thenIO") thenIOIdKey
748 bindIOName        = varQual gHC_BASE (fsLit "bindIO") bindIOIdKey
749 returnIOName      = varQual gHC_BASE (fsLit "returnIO") returnIOIdKey
750 failIOName        = varQual gHC_IO (fsLit "failIO") failIOIdKey
751
752 -- IO things
753 printName :: Name
754 printName         = varQual sYSTEM_IO (fsLit "print") printIdKey
755
756 -- Int, Word, and Addr things
757 int8TyConName, int16TyConName, int32TyConName, int64TyConName :: Name
758 int8TyConName     = tcQual gHC_INT  (fsLit "Int8") int8TyConKey
759 int16TyConName    = tcQual gHC_INT  (fsLit "Int16") int16TyConKey
760 int32TyConName    = tcQual gHC_INT  (fsLit "Int32") int32TyConKey
761 int64TyConName    = tcQual gHC_INT  (fsLit "Int64") int64TyConKey
762
763 -- Word module
764 word8TyConName, word16TyConName, word32TyConName, word64TyConName,
765     wordTyConName, wordDataConName :: Name
766 word8TyConName    = tcQual  gHC_WORD (fsLit "Word8")  word8TyConKey
767 word16TyConName   = tcQual  gHC_WORD (fsLit "Word16") word16TyConKey
768 word32TyConName   = tcQual  gHC_WORD (fsLit "Word32") word32TyConKey
769 word64TyConName   = tcQual  gHC_WORD (fsLit "Word64") word64TyConKey
770 wordTyConName     = tcQual  gHC_WORD (fsLit "Word")   wordTyConKey
771 wordDataConName   = conName gHC_WORD (fsLit "W#") wordDataConKey
772
773 -- PrelPtr module
774 ptrTyConName, funPtrTyConName :: Name
775 ptrTyConName      = tcQual   gHC_PTR (fsLit "Ptr") ptrTyConKey
776 funPtrTyConName   = tcQual   gHC_PTR (fsLit "FunPtr") funPtrTyConKey
777
778 -- Foreign objects and weak pointers
779 stablePtrTyConName, newStablePtrName :: Name
780 stablePtrTyConName    = tcQual   gHC_STABLE (fsLit "StablePtr") stablePtrTyConKey
781 newStablePtrName      = varQual  gHC_STABLE (fsLit "newStablePtr") newStablePtrIdKey
782
783 -- PrelST module
784 runSTRepName :: Name
785 runSTRepName       = varQual gHC_ST  (fsLit "runSTRep") runSTRepIdKey
786
787 -- Recursive-do notation
788 monadFixClassName, mfixName :: Name
789 monadFixClassName  = clsQual mONAD_FIX (fsLit "MonadFix") monadFixClassKey
790 mfixName           = methName mONAD_FIX (fsLit "mfix") mfixIdKey
791
792 -- Arrow notation
793 arrAName, composeAName, firstAName, appAName, choiceAName, loopAName :: Name
794 arrAName           = varQual aRROW (fsLit "arr")          arrAIdKey
795 composeAName       = varQual gHC_DESUGAR (fsLit ">>>") composeAIdKey
796 firstAName         = varQual aRROW (fsLit "first") firstAIdKey
797 appAName           = varQual aRROW (fsLit "app")          appAIdKey
798 choiceAName        = varQual aRROW (fsLit "|||")          choiceAIdKey
799 loopAName          = varQual aRROW (fsLit "loop")  loopAIdKey
800
801 -- Annotation type checking
802 toAnnotationWrapperName :: Name
803 toAnnotationWrapperName = varQual gHC_DESUGAR (fsLit "toAnnotationWrapper") toAnnotationWrapperIdKey
804
805 -- Other classes, needed for type defaulting
806 monadPlusClassName, randomClassName, randomGenClassName,
807     isStringClassName :: Name
808 monadPlusClassName  = clsQual mONAD (fsLit "MonadPlus")  monadPlusClassKey
809 randomClassName     = clsQual rANDOM (fsLit "Random")    randomClassKey
810 randomGenClassName  = clsQual rANDOM (fsLit "RandomGen") randomGenClassKey
811 isStringClassName   = clsQual dATA_STRING (fsLit "IsString") isStringClassKey
812
813 -- dotnet interop
814 objectTyConName :: Name
815 objectTyConName     = tcQual   dOTNET (fsLit "Object") objectTyConKey
816         -- objectTyConName was "wTcQual", but that's gone now, and
817         -- I can't see why it was wired in anyway...
818 unmarshalObjectName, marshalObjectName, marshalStringName,
819     unmarshalStringName, checkDotnetResName :: Name
820 unmarshalObjectName = varQual  dOTNET (fsLit "unmarshalObject") unmarshalObjectIdKey
821 marshalObjectName   = varQual  dOTNET (fsLit "marshalObject") marshalObjectIdKey
822 marshalStringName   = varQual  dOTNET (fsLit "marshalString") marshalStringIdKey
823 unmarshalStringName = varQual  dOTNET (fsLit "unmarshalString") unmarshalStringIdKey
824 checkDotnetResName  = varQual  dOTNET (fsLit "checkResult")     checkDotnetResNameIdKey
825 \end{code}
826
827 %************************************************************************
828 %*                                                                      *
829 \subsection{Local helpers}
830 %*                                                                      *
831 %************************************************************************
832
833 All these are original names; hence mkOrig
834
835 \begin{code}
836 varQual, tcQual, clsQual :: Module -> FastString -> Unique -> Name
837 varQual  = mk_known_key_name varName
838 tcQual   = mk_known_key_name tcName
839 clsQual  = mk_known_key_name clsName
840
841 mk_known_key_name :: NameSpace -> Module -> FastString -> Unique -> Name
842 mk_known_key_name space modu str unique 
843   = mkExternalName unique modu (mkOccNameFS space str) noSrcSpan
844
845 conName :: Module -> FastString -> Unique -> Name
846 conName modu occ unique
847   = mkExternalName unique modu (mkOccNameFS dataName occ) noSrcSpan
848
849 methName :: Module -> FastString -> Unique -> Name
850 methName modu occ unique
851   = mkExternalName unique modu (mkVarOccFS occ) noSrcSpan
852 \end{code}
853
854 %************************************************************************
855 %*                                                                      *
856 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
857 %*                                                                      *
858 %************************************************************************
859 --MetaHaskell extension hand allocate keys here
860
861 \begin{code}
862 boundedClassKey, enumClassKey, eqClassKey, floatingClassKey,
863     fractionalClassKey, integralClassKey, monadClassKey, dataClassKey,
864     functorClassKey, numClassKey, ordClassKey, readClassKey, realClassKey,
865     realFloatClassKey, realFracClassKey, showClassKey, ixClassKey :: Unique
866 boundedClassKey         = mkPreludeClassUnique 1 
867 enumClassKey            = mkPreludeClassUnique 2 
868 eqClassKey              = mkPreludeClassUnique 3 
869 floatingClassKey        = mkPreludeClassUnique 5 
870 fractionalClassKey      = mkPreludeClassUnique 6 
871 integralClassKey        = mkPreludeClassUnique 7 
872 monadClassKey           = mkPreludeClassUnique 8 
873 dataClassKey            = mkPreludeClassUnique 9
874 functorClassKey         = mkPreludeClassUnique 10
875 numClassKey             = mkPreludeClassUnique 11
876 ordClassKey             = mkPreludeClassUnique 12
877 readClassKey            = mkPreludeClassUnique 13
878 realClassKey            = mkPreludeClassUnique 14
879 realFloatClassKey       = mkPreludeClassUnique 15
880 realFracClassKey        = mkPreludeClassUnique 16
881 showClassKey            = mkPreludeClassUnique 17
882 ixClassKey              = mkPreludeClassUnique 18
883
884 typeableClassKey, typeable1ClassKey, typeable2ClassKey, typeable3ClassKey,
885     typeable4ClassKey, typeable5ClassKey, typeable6ClassKey, typeable7ClassKey
886     :: Unique
887 typeableClassKey        = mkPreludeClassUnique 20
888 typeable1ClassKey       = mkPreludeClassUnique 21
889 typeable2ClassKey       = mkPreludeClassUnique 22
890 typeable3ClassKey       = mkPreludeClassUnique 23
891 typeable4ClassKey       = mkPreludeClassUnique 24
892 typeable5ClassKey       = mkPreludeClassUnique 25
893 typeable6ClassKey       = mkPreludeClassUnique 26
894 typeable7ClassKey       = mkPreludeClassUnique 27
895
896 monadFixClassKey :: Unique
897 monadFixClassKey        = mkPreludeClassUnique 28
898
899 monadPlusClassKey, randomClassKey, randomGenClassKey :: Unique
900 monadPlusClassKey       = mkPreludeClassUnique 30
901 randomClassKey          = mkPreludeClassUnique 31
902 randomGenClassKey       = mkPreludeClassUnique 32
903
904 isStringClassKey :: Unique
905 isStringClassKey        = mkPreludeClassUnique 33
906
907 applicativeClassKey, foldableClassKey, traversableClassKey :: Unique
908 applicativeClassKey     = mkPreludeClassUnique 34
909 foldableClassKey        = mkPreludeClassUnique 35
910 traversableClassKey     = mkPreludeClassUnique 36
911 \end{code}
912
913 %************************************************************************
914 %*                                                                      *
915 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
916 %*                                                                      *
917 %************************************************************************
918
919 \begin{code}
920 addrPrimTyConKey, arrayPrimTyConKey, boolTyConKey, byteArrayPrimTyConKey,
921     charPrimTyConKey, charTyConKey, doublePrimTyConKey, doubleTyConKey,
922     floatPrimTyConKey, floatTyConKey, funTyConKey, intPrimTyConKey,
923     intTyConKey, int8TyConKey, int16TyConKey, int32PrimTyConKey,
924     int32TyConKey, int64PrimTyConKey, int64TyConKey, integerTyConKey,
925     listTyConKey, foreignObjPrimTyConKey, weakPrimTyConKey,
926     mutableArrayPrimTyConKey, mutableByteArrayPrimTyConKey,
927     orderingTyConKey, mVarPrimTyConKey, ratioTyConKey, rationalTyConKey,
928     realWorldTyConKey, stablePtrPrimTyConKey, stablePtrTyConKey,
929     anyTyConKey :: Unique
930 addrPrimTyConKey                        = mkPreludeTyConUnique  1
931 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
932 boolTyConKey                            = mkPreludeTyConUnique  4
933 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
934 charPrimTyConKey                        = mkPreludeTyConUnique  7
935 charTyConKey                            = mkPreludeTyConUnique  8
936 doublePrimTyConKey                      = mkPreludeTyConUnique  9
937 doubleTyConKey                          = mkPreludeTyConUnique 10 
938 floatPrimTyConKey                       = mkPreludeTyConUnique 11
939 floatTyConKey                           = mkPreludeTyConUnique 12
940 funTyConKey                             = mkPreludeTyConUnique 13
941 intPrimTyConKey                         = mkPreludeTyConUnique 14
942 intTyConKey                             = mkPreludeTyConUnique 15
943 int8TyConKey                            = mkPreludeTyConUnique 16
944 int16TyConKey                           = mkPreludeTyConUnique 17
945 int32PrimTyConKey                       = mkPreludeTyConUnique 18
946 int32TyConKey                           = mkPreludeTyConUnique 19
947 int64PrimTyConKey                       = mkPreludeTyConUnique 20
948 int64TyConKey                           = mkPreludeTyConUnique 21
949 integerTyConKey                         = mkPreludeTyConUnique 22
950 listTyConKey                            = mkPreludeTyConUnique 23
951 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
952 weakPrimTyConKey                        = mkPreludeTyConUnique 27
953 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
954 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
955 orderingTyConKey                        = mkPreludeTyConUnique 30
956 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
957 ratioTyConKey                           = mkPreludeTyConUnique 32
958 rationalTyConKey                        = mkPreludeTyConUnique 33
959 realWorldTyConKey                       = mkPreludeTyConUnique 34
960 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
961 stablePtrTyConKey                       = mkPreludeTyConUnique 36
962 anyTyConKey                             = mkPreludeTyConUnique 37
963
964 statePrimTyConKey, stableNamePrimTyConKey, stableNameTyConKey,
965     mutVarPrimTyConKey, ioTyConKey,
966     wordPrimTyConKey, wordTyConKey, word8TyConKey, word16TyConKey,
967     word32PrimTyConKey, word32TyConKey, word64PrimTyConKey, word64TyConKey,
968     liftedConKey, unliftedConKey, anyBoxConKey, kindConKey, boxityConKey,
969     typeConKey, threadIdPrimTyConKey, bcoPrimTyConKey, ptrTyConKey,
970     funPtrTyConKey, tVarPrimTyConKey :: Unique
971 statePrimTyConKey                       = mkPreludeTyConUnique 50
972 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
973 stableNameTyConKey                      = mkPreludeTyConUnique 52
974 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
975 ioTyConKey                              = mkPreludeTyConUnique 56
976 wordPrimTyConKey                        = mkPreludeTyConUnique 58
977 wordTyConKey                            = mkPreludeTyConUnique 59
978 word8TyConKey                           = mkPreludeTyConUnique 60
979 word16TyConKey                          = mkPreludeTyConUnique 61 
980 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
981 word32TyConKey                          = mkPreludeTyConUnique 63
982 word64PrimTyConKey                      = mkPreludeTyConUnique 64
983 word64TyConKey                          = mkPreludeTyConUnique 65
984 liftedConKey                            = mkPreludeTyConUnique 66
985 unliftedConKey                          = mkPreludeTyConUnique 67
986 anyBoxConKey                            = mkPreludeTyConUnique 68
987 kindConKey                              = mkPreludeTyConUnique 69
988 boxityConKey                            = mkPreludeTyConUnique 70
989 typeConKey                              = mkPreludeTyConUnique 71
990 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
991 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
992 ptrTyConKey                             = mkPreludeTyConUnique 74
993 funPtrTyConKey                          = mkPreludeTyConUnique 75
994 tVarPrimTyConKey                        = mkPreludeTyConUnique 76
995
996 -- Generic Type Constructors
997 crossTyConKey, plusTyConKey, genUnitTyConKey :: Unique
998 crossTyConKey                           = mkPreludeTyConUnique 79
999 plusTyConKey                            = mkPreludeTyConUnique 80
1000 genUnitTyConKey                         = mkPreludeTyConUnique 81
1001
1002 -- Parallel array type constructor
1003 parrTyConKey :: Unique
1004 parrTyConKey                            = mkPreludeTyConUnique 82
1005
1006 -- dotnet interop
1007 objectTyConKey :: Unique
1008 objectTyConKey                          = mkPreludeTyConUnique 83
1009
1010 eitherTyConKey :: Unique
1011 eitherTyConKey                          = mkPreludeTyConUnique 84
1012
1013 -- Super Kinds constructors
1014 tySuperKindTyConKey, coSuperKindTyConKey :: Unique
1015 tySuperKindTyConKey                    = mkPreludeTyConUnique 85
1016 coSuperKindTyConKey                    = mkPreludeTyConUnique 86
1017
1018 -- Kind constructors
1019 liftedTypeKindTyConKey, openTypeKindTyConKey, unliftedTypeKindTyConKey,
1020     ubxTupleKindTyConKey, argTypeKindTyConKey :: Unique
1021 liftedTypeKindTyConKey                  = mkPreludeTyConUnique 87
1022 openTypeKindTyConKey                    = mkPreludeTyConUnique 88
1023 unliftedTypeKindTyConKey                = mkPreludeTyConUnique 89
1024 ubxTupleKindTyConKey                    = mkPreludeTyConUnique 90
1025 argTypeKindTyConKey                     = mkPreludeTyConUnique 91
1026
1027 -- Coercion constructors
1028 symCoercionTyConKey, transCoercionTyConKey, leftCoercionTyConKey,
1029     rightCoercionTyConKey, instCoercionTyConKey, unsafeCoercionTyConKey,
1030     csel1CoercionTyConKey, csel2CoercionTyConKey, cselRCoercionTyConKey
1031     :: Unique
1032 symCoercionTyConKey                     = mkPreludeTyConUnique 93
1033 transCoercionTyConKey                   = mkPreludeTyConUnique 94
1034 leftCoercionTyConKey                    = mkPreludeTyConUnique 95
1035 rightCoercionTyConKey                   = mkPreludeTyConUnique 96
1036 instCoercionTyConKey                    = mkPreludeTyConUnique 97
1037 unsafeCoercionTyConKey                  = mkPreludeTyConUnique 98
1038 csel1CoercionTyConKey                   = mkPreludeTyConUnique 99
1039 csel2CoercionTyConKey                   = mkPreludeTyConUnique 100
1040 cselRCoercionTyConKey                   = mkPreludeTyConUnique 101
1041
1042 unknownTyConKey, unknown1TyConKey, unknown2TyConKey, unknown3TyConKey,
1043     opaqueTyConKey :: Unique
1044 unknownTyConKey                         = mkPreludeTyConUnique 129
1045 unknown1TyConKey                        = mkPreludeTyConUnique 130
1046 unknown2TyConKey                        = mkPreludeTyConUnique 131
1047 unknown3TyConKey                        = mkPreludeTyConUnique 132
1048 opaqueTyConKey                          = mkPreludeTyConUnique 133
1049
1050 stringTyConKey :: Unique
1051 stringTyConKey                          = mkPreludeTyConUnique 134
1052
1053 ---------------- Template Haskell -------------------
1054 --      USES TyConUniques 100-129
1055 -----------------------------------------------------
1056
1057 unitTyConKey :: Unique
1058 unitTyConKey = mkTupleTyConUnique Boxed 0
1059 \end{code}
1060
1061 %************************************************************************
1062 %*                                                                      *
1063 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1064 %*                                                                      *
1065 %************************************************************************
1066
1067 \begin{code}
1068 charDataConKey, consDataConKey, doubleDataConKey, falseDataConKey,
1069     floatDataConKey, intDataConKey, nilDataConKey, ratioDataConKey,
1070     stableNameDataConKey, trueDataConKey, wordDataConKey,
1071     ioDataConKey, integerDataConKey :: Unique
1072 charDataConKey                          = mkPreludeDataConUnique  1
1073 consDataConKey                          = mkPreludeDataConUnique  2
1074 doubleDataConKey                        = mkPreludeDataConUnique  3
1075 falseDataConKey                         = mkPreludeDataConUnique  4
1076 floatDataConKey                         = mkPreludeDataConUnique  5
1077 intDataConKey                           = mkPreludeDataConUnique  6
1078 nilDataConKey                           = mkPreludeDataConUnique 11
1079 ratioDataConKey                         = mkPreludeDataConUnique 12
1080 stableNameDataConKey                    = mkPreludeDataConUnique 14
1081 trueDataConKey                          = mkPreludeDataConUnique 15
1082 wordDataConKey                          = mkPreludeDataConUnique 16
1083 ioDataConKey                            = mkPreludeDataConUnique 17
1084 integerDataConKey                       = mkPreludeDataConUnique 18
1085
1086 -- Generic data constructors
1087 crossDataConKey, inlDataConKey, inrDataConKey, genUnitDataConKey :: Unique
1088 crossDataConKey                         = mkPreludeDataConUnique 20
1089 inlDataConKey                           = mkPreludeDataConUnique 21
1090 inrDataConKey                           = mkPreludeDataConUnique 22
1091 genUnitDataConKey                       = mkPreludeDataConUnique 23
1092
1093 -- Data constructor for parallel arrays
1094 parrDataConKey :: Unique
1095 parrDataConKey                          = mkPreludeDataConUnique 24
1096
1097 leftDataConKey, rightDataConKey :: Unique
1098 leftDataConKey                          = mkPreludeDataConUnique 25
1099 rightDataConKey                         = mkPreludeDataConUnique 26
1100 \end{code}
1101
1102 %************************************************************************
1103 %*                                                                      *
1104 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1105 %*                                                                      *
1106 %************************************************************************
1107
1108 \begin{code}
1109 absentErrorIdKey, augmentIdKey, appendIdKey, buildIdKey, errorIdKey,
1110     foldlIdKey, foldrIdKey, recSelErrorIdKey,
1111     integerMinusOneIdKey, integerPlusOneIdKey,
1112     integerPlusTwoIdKey, integerZeroIdKey,
1113     int2IntegerIdKey, seqIdKey, irrefutPatErrorIdKey, eqStringIdKey,
1114     noMethodBindingErrorIdKey, nonExhaustiveGuardsErrorIdKey,
1115     runtimeErrorIdKey, parErrorIdKey, parIdKey, patErrorIdKey,
1116     realWorldPrimIdKey, recConErrorIdKey, recUpdErrorIdKey,
1117     traceIdKey,
1118     unpackCStringUtf8IdKey, unpackCStringAppendIdKey,
1119     unpackCStringFoldrIdKey, unpackCStringIdKey :: Unique
1120 absentErrorIdKey              = mkPreludeMiscIdUnique  1
1121 augmentIdKey                  = mkPreludeMiscIdUnique  3
1122 appendIdKey                   = mkPreludeMiscIdUnique  4
1123 buildIdKey                    = mkPreludeMiscIdUnique  5
1124 errorIdKey                    = mkPreludeMiscIdUnique  6
1125 foldlIdKey                    = mkPreludeMiscIdUnique  7
1126 foldrIdKey                    = mkPreludeMiscIdUnique  8
1127 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
1128 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
1129 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
1130 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
1131 integerZeroIdKey              = mkPreludeMiscIdUnique 13
1132 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
1133 seqIdKey                      = mkPreludeMiscIdUnique 15
1134 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
1135 eqStringIdKey                 = mkPreludeMiscIdUnique 17
1136 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
1137 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1138 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
1139 parErrorIdKey                 = mkPreludeMiscIdUnique 21
1140 parIdKey                      = mkPreludeMiscIdUnique 22
1141 patErrorIdKey                 = mkPreludeMiscIdUnique 23
1142 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
1143 recConErrorIdKey              = mkPreludeMiscIdUnique 25
1144 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
1145 traceIdKey                    = mkPreludeMiscIdUnique 27
1146 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
1147 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
1148 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
1149 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
1150
1151 unsafeCoerceIdKey, concatIdKey, filterIdKey, zipIdKey, bindIOIdKey,
1152     returnIOIdKey, deRefStablePtrIdKey, newStablePtrIdKey,
1153     smallIntegerIdKey, plusIntegerIdKey, timesIntegerIdKey,
1154     printIdKey, failIOIdKey, nullAddrIdKey, voidArgIdKey,
1155     fstIdKey, sndIdKey, otherwiseIdKey, assertIdKey, runSTRepIdKey :: Unique
1156 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
1157 concatIdKey                   = mkPreludeMiscIdUnique 33
1158 filterIdKey                   = mkPreludeMiscIdUnique 34
1159 zipIdKey                      = mkPreludeMiscIdUnique 35
1160 bindIOIdKey                   = mkPreludeMiscIdUnique 36
1161 returnIOIdKey                 = mkPreludeMiscIdUnique 37
1162 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
1163 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
1164 smallIntegerIdKey             = mkPreludeMiscIdUnique 40
1165 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
1166 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
1167 printIdKey                    = mkPreludeMiscIdUnique 43
1168 failIOIdKey                   = mkPreludeMiscIdUnique 44
1169 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
1170 voidArgIdKey                  = mkPreludeMiscIdUnique 47
1171 fstIdKey                      = mkPreludeMiscIdUnique 49
1172 sndIdKey                      = mkPreludeMiscIdUnique 50
1173 otherwiseIdKey                = mkPreludeMiscIdUnique 51
1174 assertIdKey                   = mkPreludeMiscIdUnique 53
1175 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
1176
1177 rootMainKey, runMainKey :: Unique
1178 rootMainKey                   = mkPreludeMiscIdUnique 55
1179 runMainKey                    = mkPreludeMiscIdUnique 56
1180
1181 thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
1182 thenIOIdKey                   = mkPreludeMiscIdUnique 59
1183 lazyIdKey                     = mkPreludeMiscIdUnique 60
1184 assertErrorIdKey              = mkPreludeMiscIdUnique 61
1185
1186 breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
1187     breakpointJumpIdKey, breakpointCondJumpIdKey,
1188     breakpointAutoJumpIdKey :: Unique
1189 breakpointIdKey               = mkPreludeMiscIdUnique 62
1190 breakpointCondIdKey           = mkPreludeMiscIdUnique 63
1191 breakpointAutoIdKey           = mkPreludeMiscIdUnique 64
1192 breakpointJumpIdKey           = mkPreludeMiscIdUnique 65
1193 breakpointCondJumpIdKey       = mkPreludeMiscIdUnique 66
1194 breakpointAutoJumpIdKey       = mkPreludeMiscIdUnique 67
1195
1196 inlineIdKey :: Unique
1197 inlineIdKey                   = mkPreludeMiscIdUnique 68
1198
1199 mapIdKey, groupWithIdKey :: Unique
1200 mapIdKey                      = mkPreludeMiscIdUnique 69
1201 groupWithIdKey        = mkPreludeMiscIdUnique 70
1202
1203 -- Parallel array functions
1204 singletonPIdKey, nullPIdKey, lengthPIdKey, replicatePIdKey, mapPIdKey,
1205     filterPIdKey, zipPIdKey, crossMapPIdKey, indexPIdKey, toPIdKey,
1206     enumFromToPIdKey, enumFromThenToPIdKey, emptyPIdKey, appPIdKey :: Unique
1207 singletonPIdKey               = mkPreludeMiscIdUnique 79
1208 nullPIdKey                    = mkPreludeMiscIdUnique 80
1209 lengthPIdKey                  = mkPreludeMiscIdUnique 81
1210 replicatePIdKey               = mkPreludeMiscIdUnique 82
1211 mapPIdKey                     = mkPreludeMiscIdUnique 83
1212 filterPIdKey                  = mkPreludeMiscIdUnique 84
1213 zipPIdKey                     = mkPreludeMiscIdUnique 85
1214 crossMapPIdKey                = mkPreludeMiscIdUnique 86
1215 indexPIdKey                   = mkPreludeMiscIdUnique 87
1216 toPIdKey                      = mkPreludeMiscIdUnique 88
1217 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
1218 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
1219 emptyPIdKey                   = mkPreludeMiscIdUnique 91
1220 appPIdKey                     = mkPreludeMiscIdUnique 92
1221
1222 -- dotnet interop
1223 unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
1224     unmarshalStringIdKey, checkDotnetResNameIdKey :: Unique
1225 unmarshalObjectIdKey          = mkPreludeMiscIdUnique 94
1226 marshalObjectIdKey            = mkPreludeMiscIdUnique 95
1227 marshalStringIdKey            = mkPreludeMiscIdUnique 96
1228 unmarshalStringIdKey          = mkPreludeMiscIdUnique 97
1229 checkDotnetResNameIdKey       = mkPreludeMiscIdUnique 98
1230
1231 \end{code}
1232
1233 Certain class operations from Prelude classes.  They get their own
1234 uniques so we can look them up easily when we want to conjure them up
1235 during type checking.
1236
1237 \begin{code}
1238         -- Just a place holder for  unbound variables  produced by the renamer:
1239 unboundKey :: Unique
1240 unboundKey                    = mkPreludeMiscIdUnique 101 
1241
1242 fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
1243     enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
1244     enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
1245     failMClassOpKey, bindMClassOpKey, thenMClassOpKey, returnMClassOpKey
1246     :: Unique
1247 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
1248 minusClassOpKey               = mkPreludeMiscIdUnique 103
1249 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
1250 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
1251 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
1252 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
1253 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
1254 eqClassOpKey                  = mkPreludeMiscIdUnique 109
1255 geClassOpKey                  = mkPreludeMiscIdUnique 110
1256 negateClassOpKey              = mkPreludeMiscIdUnique 111
1257 failMClassOpKey               = mkPreludeMiscIdUnique 112
1258 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
1259 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
1260 returnMClassOpKey             = mkPreludeMiscIdUnique 117
1261
1262 -- Recursive do notation
1263 mfixIdKey :: Unique
1264 mfixIdKey       = mkPreludeMiscIdUnique 118
1265
1266 -- Arrow notation
1267 arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
1268     loopAIdKey :: Unique
1269 arrAIdKey       = mkPreludeMiscIdUnique 119
1270 composeAIdKey   = mkPreludeMiscIdUnique 120 -- >>>
1271 firstAIdKey     = mkPreludeMiscIdUnique 121
1272 appAIdKey       = mkPreludeMiscIdUnique 122
1273 choiceAIdKey    = mkPreludeMiscIdUnique 123 --  |||
1274 loopAIdKey      = mkPreludeMiscIdUnique 124
1275
1276 fromStringClassOpKey :: Unique
1277 fromStringClassOpKey          = mkPreludeMiscIdUnique 125
1278
1279 -- Annotation type checking
1280 toAnnotationWrapperIdKey :: Unique
1281 toAnnotationWrapperIdKey      = mkPreludeMiscIdUnique 126
1282
1283
1284 ---------------- Template Haskell -------------------
1285 --      USES IdUniques 200-399
1286 -----------------------------------------------------
1287 \end{code}
1288
1289
1290 %************************************************************************
1291 %*                                                                      *
1292 \subsection{Standard groups of types}
1293 %*                                                                      *
1294 %************************************************************************
1295
1296 \begin{code}
1297 numericTyKeys :: [Unique]
1298 numericTyKeys = 
1299         [ wordTyConKey
1300         , intTyConKey
1301         , integerTyConKey
1302         , doubleTyConKey
1303         , floatTyConKey
1304         ]
1305
1306 kindKeys :: [Unique] 
1307 kindKeys = [ liftedTypeKindTyConKey
1308            , openTypeKindTyConKey
1309            , unliftedTypeKindTyConKey
1310            , ubxTupleKindTyConKey 
1311            , argTypeKindTyConKey ]
1312 \end{code}
1313
1314
1315 %************************************************************************
1316 %*                                                                      *
1317 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1318 %*                                                                      *
1319 %************************************************************************
1320
1321 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1322 even though every numeric class has these two as a superclass,
1323 because the list of ambiguous dictionaries hasn't been simplified.
1324
1325 \begin{code}
1326 numericClassKeys :: [Unique]
1327 numericClassKeys =
1328         [ numClassKey
1329         , realClassKey
1330         , integralClassKey
1331         ]
1332         ++ fractionalClassKeys
1333
1334 fractionalClassKeys :: [Unique]
1335 fractionalClassKeys = 
1336         [ fractionalClassKey
1337         , floatingClassKey
1338         , realFracClassKey
1339         , realFloatClassKey
1340         ]
1341
1342         -- the strictness analyser needs to know about numeric types
1343         -- (see SaAbsInt.lhs)
1344 needsDataDeclCtxtClassKeys :: [Unique]
1345 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1346         [ readClassKey
1347         ]
1348
1349 -- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1350 -- and are: "classes defined in the Prelude or a standard library"
1351 standardClassKeys :: [Unique]
1352 standardClassKeys = derivableClassKeys ++ numericClassKeys
1353                   ++ [randomClassKey, randomGenClassKey,
1354                       functorClassKey, 
1355                       monadClassKey, monadPlusClassKey,
1356                       isStringClassKey,
1357                       applicativeClassKey, foldableClassKey, traversableClassKey
1358                      ]
1359 \end{code}
1360
1361 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1362 (@TcDeriv@).
1363
1364 \begin{code}
1365 derivableClassKeys :: [Unique]
1366 derivableClassKeys
1367   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1368       boundedClassKey, showClassKey, readClassKey ]
1369 \end{code}
1370