root/compiler/prelude/PrelNames.lhs

Revision f906b919895fed2ec4e8f2491e60788c72a4bc84, 78.3 KB (checked in by Ian Lynagh <igloo@…>, 7 days ago)

Follow the move of the Word type to ghc-prim

  • Property mode set to 100644
Line 
1%
2% (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3%
4\section[PrelNames]{Definitions of prelude modules and names}
5
6
7Nota 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
38Note [Known-key names]
39~~~~~~~~~~~~~~~~~~~~~~
40
41It is *very* important that the compiler gives wired-in things and things with "known-key" names
42the correct Uniques wherever they occur. We have to be careful about this in exactly two places:
43
44  1. When we parse some source code, renaming the AST better yield an AST whose Names have the
45     correct uniques
46
47  2. When we read an interface file, the read-in gubbins better have the right uniques
48
49This is accomplished through a combination of mechanisms:
50
51  1. When parsing source code, the RdrName-decorated AST has some RdrNames which are Exact. These are
52     wired-in RdrNames where the we could directly tell from the parsed syntax what Name to use. For
53     example, when we parse a [] in a type we can just insert an Exact RdrName Name with the listTyConKey.
54
55     Currently, I believe this is just an optimisation: it would be equally valid to just output Orig
56     RdrNames that correctly record the module etc we expect the final Name to come from. However,
57     were we to eliminate isTupleOcc_maybe it would become essential (see point 3).
58
59  2. The knownKeyNames (which consist of the basicKnownKeyNames from the module, and those names reachable
60     via the wired-in stuff from TysWiredIn) are used to initialise the "original name cache" in IfaceEnv.
61     This initialization ensures that when the type checker or renamer (both of which use IfaceEnv) look up
62     an original name (i.e. a pair of a Module and an OccName) for a known-key name they get the correct Unique.
63
64     This is the most important mechanism for ensuring that known-key stuff gets the right Unique, and is why
65     it is so important to place your known-key names in the appropriate lists.
66
67  3. For "infinite families" of known-key names (i.e. tuples, Any tycons and implicit parameter TyCons), we
68     have to be extra careful. Because there are an infinite number of these things, we cannot add them to
69     the list of known-key names used to initialise the original name cache. Instead, we have to rely on
70     never having to look them up in that cache.
71
72     This is accomplished through a variety of mechanisms:
73
74       a) The known infinite families of names are specially serialised by BinIface.putName, with that special treatment
75          detected when we read back to ensure that we get back to the correct uniques.
76
77       b) Most of the infinite families cannot occur in source code, so mechanism a) sufficies to ensure that they
78          always have the right Unique. In particular, implicit param TyCon names, constraint tuples and Any TyCons
79          cannot be mentioned by the user.
80
81       c) Tuple TyCon/DataCon names have a special hack (isTupleOcc_maybe) that is used by the original name cache
82          lookup routine to detect tuple names and give them the right Unique. You might think that this is unnecessary
83          because tuple TyCon/DataCons are parsed as Exact RdrNames and *don't* appear as original names in interface files
84          (because serialization gives them special treatment), so we will never look them up in the original name cache.
85
86          However, there is a subtle reason why this is not the case: if you use setRdrNameSpace on an Exact RdrName
87          it may be turned into an Orig RdrName. So if the original name was an Exact tuple Name we might end up with
88          an Orig instead, which *will* lead to an original name cache query.
89\begin{code}
90module PrelNames (
91        Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
92
93        -----------------------------------------------------------
94        module PrelNames,       -- A huge bunch of (a) Names,  e.g. intTyConName
95                                --                 (b) Uniques e.g. intTyConKey
96                                --                 (c) Groups of classes and types
97                                --                 (d) miscellaneous things
98                                -- So many that we export them all
99    ) where
100
101#include "HsVersions.h"
102
103import Module
104import OccName
105import RdrName
106import Unique
107import BasicTypes
108import Name
109import SrcLoc
110import FastString
111\end{code}
112
113
114%************************************************************************
115%*                                                                      *
116\subsection{Local Names}
117%*                                                                      *
118%************************************************************************
119
120This *local* name is used by the interactive stuff
121
122\begin{code}
123itName :: Unique -> SrcSpan -> Name
124itName uniq loc = mkInternalName uniq (mkOccNameFS varName (fsLit "it")) loc
125\end{code}
126
127\begin{code}
128-- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
129-- during compiler debugging.
130mkUnboundName :: RdrName -> Name
131mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcSpan
132
133isUnboundName :: Name -> Bool
134isUnboundName name = name `hasKey` unboundKey
135\end{code}
136
137
138%************************************************************************
139%*                                                                      *
140\subsection{Known key Names}
141%*                                                                      *
142%************************************************************************
143
144This section tells what the compiler knows about the association of
145names with uniques.  These ones are the *non* wired-in ones.  The
146wired in ones are defined in TysWiredIn etc.
147
148The names for DPH can come from one of multiple backend packages. At the point where
149'basicKnownKeyNames' is used, we don't know which backend it will be.  Hence, we list
150the names for multiple backends.  That works out fine, although they use the same uniques,
151as we are guaranteed to only load one backend; hence, only one of the different names
152sharing a unique will be used.
153
154\begin{code}
155basicKnownKeyNames :: [Name]
156basicKnownKeyNames
157 = genericTyConNames
158 ++ typeableClassNames
159 ++ [   -- Type constructors (synonyms especially)
160        ioTyConName, ioDataConName,
161        runMainIOName,
162        rationalTyConName,
163        stringTyConName,
164        ratioDataConName,
165        ratioTyConName,
166        integerTyConName,
167
168        --  Classes.  *Must* include:
169        --      classes that are grabbed by key (e.g., eqClassKey)
170        --      classes in "Class.standardClassKeys" (quite a few)
171        eqClassName,                    -- mentioned, derivable
172        ordClassName,                   -- derivable
173        boundedClassName,               -- derivable
174        numClassName,                   -- mentioned, numeric
175        enumClassName,                  -- derivable
176        monadClassName,
177        functorClassName,
178        realClassName,                  -- numeric
179        integralClassName,              -- numeric
180        fractionalClassName,            -- numeric
181        floatingClassName,              -- numeric
182        realFracClassName,              -- numeric
183        realFloatClassName,             -- numeric
184        dataClassName,
185        isStringClassName,
186        applicativeClassName,
187        foldableClassName,
188        traversableClassName,
189
190        -- Numeric stuff
191        negateName, minusName, geName, eqName,
192
193        -- Conversion functions
194        fromRationalName, fromIntegerName,
195        toIntegerName, toRationalName,
196        fromIntegralName, realToFracName,
197
198        -- String stuff
199        fromStringName,
200
201        -- Enum stuff
202        enumFromName, enumFromThenName,
203        enumFromThenToName, enumFromToName,
204
205        -- Monad stuff
206        thenIOName, bindIOName, returnIOName, failIOName,
207        failMName, bindMName, thenMName, returnMName,
208        fmapName,
209
210        -- MonadRec stuff
211        mfixName,
212
213        -- Arrow stuff
214        arrAName, composeAName, firstAName,
215        appAName, choiceAName, loopAName,
216
217        -- Ix stuff
218        ixClassName,
219
220        -- Show stuff
221        showClassName,
222
223        -- Read stuff
224        readClassName,
225
226        -- Stable pointers
227        newStablePtrName,
228
229    -- GHC Extensions
230        groupWithName,
231
232        -- Strings and lists
233        unpackCStringName,
234        unpackCStringFoldrName, unpackCStringUtf8Name,
235
236        -- List operations
237        concatName, filterName, mapName,
238        zipName, foldrName, buildName, augmentName, appendName,
239
240        dollarName,         -- The ($) apply function
241
242        -- FFI primitive types that are not wired-in.
243        stablePtrTyConName, ptrTyConName, funPtrTyConName,
244        int8TyConName, int16TyConName, int32TyConName, int64TyConName,
245        wordTyConName, word8TyConName, word16TyConName, word32TyConName, word64TyConName,
246
247        -- Others
248        otherwiseIdName, inlineIdName,
249        eqStringName, assertName, breakpointName, breakpointCondName,
250        breakpointAutoName,  opaqueTyConName,
251        assertErrorName, runSTRepName,
252        printName, fstName, sndName,
253
254        -- Integer
255        integerTyConName, mkIntegerName,
256        integerToWord64Name, integerToInt64Name,
257        plusIntegerName, timesIntegerName, smallIntegerName,
258        integerToWordName, integerToIntName, minusIntegerName,
259        negateIntegerName, eqIntegerName, neqIntegerName,
260        absIntegerName, signumIntegerName,
261        leIntegerName, gtIntegerName, ltIntegerName, geIntegerName,
262        compareIntegerName, quotRemIntegerName, divModIntegerName,
263        quotIntegerName, remIntegerName,
264        floatFromIntegerName, doubleFromIntegerName,
265        encodeFloatIntegerName, encodeDoubleIntegerName,
266        gcdIntegerName, lcmIntegerName,
267        andIntegerName, orIntegerName, xorIntegerName, complementIntegerName,
268        shiftLIntegerName, shiftRIntegerName,
269
270        -- MonadFix
271        monadFixClassName, mfixName,
272
273        -- Other classes
274        randomClassName, randomGenClassName, monadPlusClassName,
275
276        -- Type-level naturals
277        typeNatKindConName,
278        typeStringKindConName,
279        singIClassName,
280        typeNatLeqClassName,
281        typeNatAddTyFamName,
282        typeNatMulTyFamName,
283        typeNatExpTyFamName,
284
285        -- Annotation type checking
286        toAnnotationWrapperName
287
288        -- The Ordering type
289        , orderingTyConName, ltDataConName, eqDataConName, gtDataConName
290
291        -- The Either type
292        , eitherTyConName, leftDataConName, rightDataConName
293
294        -- Plugins
295        , pluginTyConName
296
297        -- dotnet interop
298        , objectTyConName, marshalObjectName, unmarshalObjectName
299        , marshalStringName, unmarshalStringName, checkDotnetResName
300
301        -- Generics
302        , genClassName, gen1ClassName
303        , datatypeClassName, constructorClassName, selectorClassName
304
305        -- Monad comprehensions
306        , guardMName
307        , liftMName
308        , mzipName
309
310        -- GHCi Sandbox
311        , ghciIoClassName, ghciStepIoMName
312    ]
313
314genericTyConNames :: [Name]
315genericTyConNames = [
316    v1TyConName, u1TyConName, par1TyConName, rec1TyConName,
317    k1TyConName, m1TyConName, sumTyConName, prodTyConName,
318    compTyConName, rTyConName, pTyConName, dTyConName,
319    cTyConName, sTyConName, rec0TyConName, par0TyConName,
320    d1TyConName, c1TyConName, s1TyConName, noSelTyConName,
321    repTyConName, rep1TyConName
322  ]
323\end{code}
324
325
326%************************************************************************
327%*                                                                      *
328\subsection{Module names}
329%*                                                                      *
330%************************************************************************
331
332
333--MetaHaskell Extension Add a new module here
334\begin{code}
335pRELUDE :: Module
336pRELUDE         = mkBaseModule_ pRELUDE_NAME
337
338gHC_PRIM, gHC_TYPES, gHC_GENERICS,
339    gHC_MAGIC,
340    gHC_CLASSES, gHC_BASE, gHC_ENUM, gHC_GHCI, gHC_CSTRING,
341    gHC_SHOW, gHC_READ, gHC_NUM, gHC_INTEGER_TYPE, gHC_LIST,
342    gHC_TUPLE, dATA_TUPLE, dATA_EITHER, dATA_STRING, dATA_FOLDABLE, dATA_TRAVERSABLE,
343    gHC_CONC, gHC_IO, gHC_IO_Exception,
344    gHC_ST, gHC_ARR, gHC_STABLE, gHC_PTR, gHC_ERR, gHC_REAL,
345    gHC_FLOAT, gHC_TOP_HANDLER, sYSTEM_IO, dYNAMIC, tYPEABLE, tYPEABLE_INTERNAL, gENERICS,
346    dOTNET, rEAD_PREC, lEX, gHC_INT, gHC_WORD, mONAD, mONAD_FIX, mONAD_ZIP,
347    aRROW, cONTROL_APPLICATIVE, gHC_DESUGAR, rANDOM, gHC_EXTS,
348    cONTROL_EXCEPTION_BASE, gHC_TYPELITS :: Module
349
350gHC_PRIM        = mkPrimModule (fsLit "GHC.Prim")   -- Primitive types and values
351gHC_TYPES       = mkPrimModule (fsLit "GHC.Types")
352gHC_GENERICS    = mkPrimModule (fsLit "GHC.Generics")
353gHC_MAGIC       = mkPrimModule (fsLit "GHC.Magic")
354gHC_CSTRING     = mkPrimModule (fsLit "GHC.CString")
355gHC_CLASSES     = mkPrimModule (fsLit "GHC.Classes")
356
357gHC_BASE        = mkBaseModule (fsLit "GHC.Base")
358gHC_ENUM        = mkBaseModule (fsLit "GHC.Enum")
359gHC_GHCI        = mkBaseModule (fsLit "GHC.GHCi")
360gHC_SHOW        = mkBaseModule (fsLit "GHC.Show")
361gHC_READ        = mkBaseModule (fsLit "GHC.Read")
362gHC_NUM         = mkBaseModule (fsLit "GHC.Num")
363gHC_INTEGER_TYPE= mkIntegerModule (fsLit "GHC.Integer.Type")
364gHC_LIST        = mkBaseModule (fsLit "GHC.List")
365gHC_TUPLE       = mkPrimModule (fsLit "GHC.Tuple")
366dATA_TUPLE      = mkBaseModule (fsLit "Data.Tuple")
367dATA_EITHER     = mkBaseModule (fsLit "Data.Either")
368dATA_STRING     = mkBaseModule (fsLit "Data.String")
369dATA_FOLDABLE   = mkBaseModule (fsLit "Data.Foldable")
370dATA_TRAVERSABLE= mkBaseModule (fsLit "Data.Traversable")
371gHC_CONC        = mkBaseModule (fsLit "GHC.Conc")
372gHC_IO          = mkBaseModule (fsLit "GHC.IO")
373gHC_IO_Exception = mkBaseModule (fsLit "GHC.IO.Exception")
374gHC_ST          = mkBaseModule (fsLit "GHC.ST")
375gHC_ARR         = mkBaseModule (fsLit "GHC.Arr")
376gHC_STABLE      = mkBaseModule (fsLit "GHC.Stable")
377gHC_PTR         = mkBaseModule (fsLit "GHC.Ptr")
378gHC_ERR         = mkBaseModule (fsLit "GHC.Err")
379gHC_REAL        = mkBaseModule (fsLit "GHC.Real")
380gHC_FLOAT       = mkBaseModule (fsLit "GHC.Float")
381gHC_TOP_HANDLER = mkBaseModule (fsLit "GHC.TopHandler")
382sYSTEM_IO       = mkBaseModule (fsLit "System.IO")
383dYNAMIC         = mkBaseModule (fsLit "Data.Dynamic")
384tYPEABLE        = mkBaseModule (fsLit "Data.Typeable")
385tYPEABLE_INTERNAL = mkBaseModule (fsLit "Data.Typeable.Internal")
386gENERICS        = mkBaseModule (fsLit "Data.Data")
387dOTNET          = mkBaseModule (fsLit "GHC.Dotnet")
388rEAD_PREC       = mkBaseModule (fsLit "Text.ParserCombinators.ReadPrec")
389lEX             = mkBaseModule (fsLit "Text.Read.Lex")
390gHC_INT         = mkBaseModule (fsLit "GHC.Int")
391gHC_WORD        = mkBaseModule (fsLit "GHC.Word")
392mONAD           = mkBaseModule (fsLit "Control.Monad")
393mONAD_FIX       = mkBaseModule (fsLit "Control.Monad.Fix")
394mONAD_ZIP       = mkBaseModule (fsLit "Control.Monad.Zip")
395aRROW           = mkBaseModule (fsLit "Control.Arrow")
396cONTROL_APPLICATIVE = mkBaseModule (fsLit "Control.Applicative")
397gHC_DESUGAR = mkBaseModule (fsLit "GHC.Desugar")
398rANDOM          = mkBaseModule (fsLit "System.Random")
399gHC_EXTS        = mkBaseModule (fsLit "GHC.Exts")
400cONTROL_EXCEPTION_BASE = mkBaseModule (fsLit "Control.Exception.Base")
401gHC_TYPELITS    = mkBaseModule (fsLit "GHC.TypeLits")
402
403gHC_PARR' :: Module
404gHC_PARR' = mkBaseModule (fsLit "GHC.PArr")
405
406mAIN, rOOT_MAIN :: Module
407mAIN            = mkMainModule_ mAIN_NAME
408rOOT_MAIN       = mkMainModule (fsLit ":Main") -- Root module for initialisation
409
410        -- The ':xxx' makes a module name that the user can never
411        -- use himself.  The z-encoding for ':' is "ZC", so the z-encoded
412        -- module name still starts with a capital letter, which keeps
413        -- the z-encoded version consistent.
414iNTERACTIVE :: Module
415iNTERACTIVE    = mkMainModule (fsLit ":Interactive")
416
417pRELUDE_NAME, mAIN_NAME :: ModuleName
418pRELUDE_NAME   = mkModuleNameFS (fsLit "Prelude")
419mAIN_NAME      = mkModuleNameFS (fsLit "Main")
420
421dATA_ARRAY_PARALLEL_NAME, dATA_ARRAY_PARALLEL_PRIM_NAME :: ModuleName
422dATA_ARRAY_PARALLEL_NAME      = mkModuleNameFS (fsLit "Data.Array.Parallel")
423dATA_ARRAY_PARALLEL_PRIM_NAME = mkModuleNameFS (fsLit "Data.Array.Parallel.Prim")
424
425mkPrimModule :: FastString -> Module
426mkPrimModule m = mkModule primPackageId (mkModuleNameFS m)
427
428mkIntegerModule :: FastString -> Module
429mkIntegerModule m = mkModule integerPackageId (mkModuleNameFS m)
430
431mkBaseModule :: FastString -> Module
432mkBaseModule m = mkModule basePackageId (mkModuleNameFS m)
433
434mkBaseModule_ :: ModuleName -> Module
435mkBaseModule_ m = mkModule basePackageId m
436
437mkThisGhcModule :: FastString -> Module
438mkThisGhcModule m = mkModule thisGhcPackageId (mkModuleNameFS m)
439
440mkThisGhcModule_ :: ModuleName -> Module
441mkThisGhcModule_ m = mkModule thisGhcPackageId m
442
443mkMainModule :: FastString -> Module
444mkMainModule m = mkModule mainPackageId (mkModuleNameFS m)
445
446mkMainModule_ :: ModuleName -> Module
447mkMainModule_ m = mkModule mainPackageId m
448\end{code}
449
450%************************************************************************
451%*                                                                      *
452\subsection{Constructing the names of tuples
453%*                                                                      *
454%************************************************************************
455
456\begin{code}
457mkTupleModule :: TupleSort -> Arity -> Module
458mkTupleModule BoxedTuple   _ = gHC_TUPLE
459mkTupleModule ConstraintTuple    _ = gHC_TUPLE
460mkTupleModule UnboxedTuple _ = gHC_PRIM
461\end{code}
462
463
464%************************************************************************
465%*                                                                      *
466                        RdrNames
467%*                                                                      *
468%************************************************************************
469
470\begin{code}
471main_RDR_Unqual    :: RdrName
472main_RDR_Unqual = mkUnqual varName (fsLit "main")
473        -- We definitely don't want an Orig RdrName, because
474        -- main might, in principle, be imported into module Main
475
476forall_tv_RDR, dot_tv_RDR :: RdrName
477forall_tv_RDR = mkUnqual tvName (fsLit "forall")
478dot_tv_RDR    = mkUnqual tvName (fsLit ".")
479
480eq_RDR, ge_RDR, ne_RDR, le_RDR, lt_RDR, gt_RDR, compare_RDR,
481    ltTag_RDR, eqTag_RDR, gtTag_RDR :: RdrName
482eq_RDR                  = nameRdrName eqName
483ge_RDR                  = nameRdrName geName
484ne_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "/=")
485le_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<=")
486lt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit "<")
487gt_RDR                  = varQual_RDR  gHC_CLASSES (fsLit ">")
488compare_RDR             = varQual_RDR  gHC_CLASSES (fsLit "compare")
489ltTag_RDR               = dataQual_RDR gHC_TYPES (fsLit "LT")
490eqTag_RDR               = dataQual_RDR gHC_TYPES (fsLit "EQ")
491gtTag_RDR               = dataQual_RDR gHC_TYPES (fsLit "GT")
492
493eqClass_RDR, numClass_RDR, ordClass_RDR, enumClass_RDR, monadClass_RDR
494    :: RdrName
495eqClass_RDR             = nameRdrName eqClassName
496numClass_RDR            = nameRdrName numClassName
497ordClass_RDR            = nameRdrName ordClassName
498enumClass_RDR           = nameRdrName enumClassName
499monadClass_RDR          = nameRdrName monadClassName
500
501map_RDR, append_RDR :: RdrName
502map_RDR                 = varQual_RDR gHC_BASE (fsLit "map")
503append_RDR              = varQual_RDR gHC_BASE (fsLit "++")
504
505foldr_RDR, build_RDR, returnM_RDR, bindM_RDR, failM_RDR :: RdrName
506foldr_RDR               = nameRdrName foldrName
507build_RDR               = nameRdrName buildName
508returnM_RDR             = nameRdrName returnMName
509bindM_RDR               = nameRdrName bindMName
510failM_RDR               = nameRdrName failMName
511
512left_RDR, right_RDR :: RdrName
513left_RDR                = nameRdrName leftDataConName
514right_RDR               = nameRdrName rightDataConName
515
516fromEnum_RDR, toEnum_RDR :: RdrName
517fromEnum_RDR            = varQual_RDR gHC_ENUM (fsLit "fromEnum")
518toEnum_RDR              = varQual_RDR gHC_ENUM (fsLit "toEnum")
519
520enumFrom_RDR, enumFromTo_RDR, enumFromThen_RDR, enumFromThenTo_RDR :: RdrName
521enumFrom_RDR            = nameRdrName enumFromName
522enumFromTo_RDR          = nameRdrName enumFromToName
523enumFromThen_RDR        = nameRdrName enumFromThenName
524enumFromThenTo_RDR      = nameRdrName enumFromThenToName
525
526ratioDataCon_RDR, plusInteger_RDR, timesInteger_RDR :: RdrName
527ratioDataCon_RDR        = nameRdrName ratioDataConName
528plusInteger_RDR         = nameRdrName plusIntegerName
529timesInteger_RDR        = nameRdrName timesIntegerName
530
531ioDataCon_RDR :: RdrName
532ioDataCon_RDR           = nameRdrName ioDataConName
533
534eqString_RDR, unpackCString_RDR, unpackCStringFoldr_RDR,
535    unpackCStringUtf8_RDR :: RdrName
536eqString_RDR            = nameRdrName eqStringName
537unpackCString_RDR       = nameRdrName unpackCStringName
538unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
539unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
540
541newStablePtr_RDR, wordDataCon_RDR :: RdrName
542newStablePtr_RDR        = nameRdrName newStablePtrName
543wordDataCon_RDR         = dataQual_RDR gHC_TYPES (fsLit "W#")
544
545bindIO_RDR, returnIO_RDR :: RdrName
546bindIO_RDR              = nameRdrName bindIOName
547returnIO_RDR            = nameRdrName returnIOName
548
549fromInteger_RDR, fromRational_RDR, minus_RDR, times_RDR, plus_RDR :: RdrName
550fromInteger_RDR         = nameRdrName fromIntegerName
551fromRational_RDR        = nameRdrName fromRationalName
552minus_RDR               = nameRdrName minusName
553times_RDR               = varQual_RDR  gHC_NUM (fsLit "*")
554plus_RDR                = varQual_RDR gHC_NUM (fsLit "+")
555
556fromString_RDR :: RdrName
557fromString_RDR          = nameRdrName fromStringName
558
559compose_RDR :: RdrName
560compose_RDR             = varQual_RDR gHC_BASE (fsLit ".")
561
562not_RDR, getTag_RDR, succ_RDR, pred_RDR, minBound_RDR, maxBound_RDR,
563    and_RDR, range_RDR, inRange_RDR, index_RDR,
564    unsafeIndex_RDR, unsafeRangeSize_RDR :: RdrName
565and_RDR                 = varQual_RDR gHC_CLASSES (fsLit "&&")
566not_RDR                 = varQual_RDR gHC_CLASSES (fsLit "not")
567getTag_RDR              = varQual_RDR gHC_BASE (fsLit "getTag")
568succ_RDR                = varQual_RDR gHC_ENUM (fsLit "succ")
569pred_RDR                = varQual_RDR gHC_ENUM (fsLit "pred")
570minBound_RDR            = varQual_RDR gHC_ENUM (fsLit "minBound")
571maxBound_RDR            = varQual_RDR gHC_ENUM (fsLit "maxBound")
572range_RDR               = varQual_RDR gHC_ARR (fsLit "range")
573inRange_RDR             = varQual_RDR gHC_ARR (fsLit "inRange")
574index_RDR               = varQual_RDR gHC_ARR (fsLit "index")
575unsafeIndex_RDR         = varQual_RDR gHC_ARR (fsLit "unsafeIndex")
576unsafeRangeSize_RDR     = varQual_RDR gHC_ARR (fsLit "unsafeRangeSize")
577
578readList_RDR, readListDefault_RDR, readListPrec_RDR, readListPrecDefault_RDR,
579    readPrec_RDR, parens_RDR, choose_RDR, lexP_RDR :: RdrName
580readList_RDR            = varQual_RDR gHC_READ (fsLit "readList")
581readListDefault_RDR     = varQual_RDR gHC_READ (fsLit "readListDefault")
582readListPrec_RDR        = varQual_RDR gHC_READ (fsLit "readListPrec")
583readListPrecDefault_RDR = varQual_RDR gHC_READ (fsLit "readListPrecDefault")
584readPrec_RDR            = varQual_RDR gHC_READ (fsLit "readPrec")
585parens_RDR              = varQual_RDR gHC_READ (fsLit "parens")
586choose_RDR              = varQual_RDR gHC_READ (fsLit "choose")
587lexP_RDR                = varQual_RDR gHC_READ (fsLit "lexP")
588
589punc_RDR, ident_RDR, symbol_RDR :: RdrName
590punc_RDR                = dataQual_RDR lEX (fsLit "Punc")
591ident_RDR               = dataQual_RDR lEX (fsLit "Ident")
592symbol_RDR              = dataQual_RDR lEX (fsLit "Symbol")
593
594step_RDR, alt_RDR, reset_RDR, prec_RDR :: RdrName
595step_RDR                = varQual_RDR  rEAD_PREC (fsLit "step")
596alt_RDR                 = varQual_RDR  rEAD_PREC (fsLit "+++")
597reset_RDR               = varQual_RDR  rEAD_PREC (fsLit "reset")
598prec_RDR                = varQual_RDR  rEAD_PREC (fsLit "prec")
599
600showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR,
601    showSpace_RDR, showParen_RDR :: RdrName
602showList_RDR            = varQual_RDR gHC_SHOW (fsLit "showList")
603showList___RDR          = varQual_RDR gHC_SHOW (fsLit "showList__")
604showsPrec_RDR           = varQual_RDR gHC_SHOW (fsLit "showsPrec")
605showString_RDR          = varQual_RDR gHC_SHOW (fsLit "showString")
606showSpace_RDR           = varQual_RDR gHC_SHOW (fsLit "showSpace")
607showParen_RDR           = varQual_RDR gHC_SHOW (fsLit "showParen")
608
609typeOf_RDR, mkTyCon_RDR, mkTyConApp_RDR :: RdrName
610typeOf_RDR     = varQual_RDR tYPEABLE_INTERNAL (fsLit "typeOf")
611mkTyCon_RDR    = varQual_RDR tYPEABLE_INTERNAL (fsLit "mkTyCon")
612mkTyConApp_RDR = varQual_RDR tYPEABLE_INTERNAL (fsLit "mkTyConApp")
613
614undefined_RDR :: RdrName
615undefined_RDR = varQual_RDR gHC_ERR (fsLit "undefined")
616
617error_RDR :: RdrName
618error_RDR = varQual_RDR gHC_ERR (fsLit "error")
619
620-- Generics (constructors and functions)
621u1DataCon_RDR, par1DataCon_RDR, rec1DataCon_RDR,
622  k1DataCon_RDR, m1DataCon_RDR, l1DataCon_RDR, r1DataCon_RDR,
623  prodDataCon_RDR, comp1DataCon_RDR, from_RDR, from1_RDR,
624  to_RDR, to1_RDR, datatypeName_RDR, moduleName_RDR, conName_RDR,
625  conFixity_RDR, conIsRecord_RDR,
626  noArityDataCon_RDR, arityDataCon_RDR, selName_RDR,
627  prefixDataCon_RDR, infixDataCon_RDR, leftAssocDataCon_RDR,
628  rightAssocDataCon_RDR, notAssocDataCon_RDR :: RdrName
629
630u1DataCon_RDR    = dataQual_RDR gHC_GENERICS (fsLit "U1")
631par1DataCon_RDR  = dataQual_RDR gHC_GENERICS (fsLit "Par1")
632rec1DataCon_RDR  = dataQual_RDR gHC_GENERICS (fsLit "Rec1")
633k1DataCon_RDR    = dataQual_RDR gHC_GENERICS (fsLit "K1")
634m1DataCon_RDR    = dataQual_RDR gHC_GENERICS (fsLit "M1")
635
636l1DataCon_RDR     = dataQual_RDR gHC_GENERICS (fsLit "L1")
637r1DataCon_RDR     = dataQual_RDR gHC_GENERICS (fsLit "R1")
638
639prodDataCon_RDR   = dataQual_RDR gHC_GENERICS (fsLit ":*:")
640comp1DataCon_RDR  = dataQual_RDR gHC_GENERICS (fsLit "Comp1")
641
642from_RDR  = varQual_RDR gHC_GENERICS (fsLit "from")
643from1_RDR = varQual_RDR gHC_GENERICS (fsLit "from1")
644to_RDR    = varQual_RDR gHC_GENERICS (fsLit "to")
645to1_RDR   = varQual_RDR gHC_GENERICS (fsLit "to1")
646
647datatypeName_RDR  = varQual_RDR gHC_GENERICS (fsLit "datatypeName")
648moduleName_RDR    = varQual_RDR gHC_GENERICS (fsLit "moduleName")
649selName_RDR       = varQual_RDR gHC_GENERICS (fsLit "selName")
650conName_RDR       = varQual_RDR gHC_GENERICS (fsLit "conName")
651conFixity_RDR     = varQual_RDR gHC_GENERICS (fsLit "conFixity")
652conIsRecord_RDR   = varQual_RDR gHC_GENERICS (fsLit "conIsRecord")
653
654noArityDataCon_RDR    = dataQual_RDR gHC_GENERICS (fsLit "NoArity")
655arityDataCon_RDR      = dataQual_RDR gHC_GENERICS (fsLit "Arity")
656prefixDataCon_RDR     = dataQual_RDR gHC_GENERICS (fsLit "Prefix")
657infixDataCon_RDR      = dataQual_RDR gHC_GENERICS (fsLit "Infix")
658leftAssocDataCon_RDR  = dataQual_RDR gHC_GENERICS (fsLit "LeftAssociative")
659rightAssocDataCon_RDR = dataQual_RDR gHC_GENERICS (fsLit "RightAssociative")
660notAssocDataCon_RDR   = dataQual_RDR gHC_GENERICS (fsLit "NotAssociative")
661
662
663fmap_RDR, pure_RDR, ap_RDR, foldable_foldr_RDR, traverse_RDR :: RdrName
664fmap_RDR                = varQual_RDR gHC_BASE (fsLit "fmap")
665pure_RDR                = varQual_RDR cONTROL_APPLICATIVE (fsLit "pure")
666ap_RDR                  = varQual_RDR cONTROL_APPLICATIVE (fsLit "<*>")
667foldable_foldr_RDR      = varQual_RDR dATA_FOLDABLE       (fsLit "foldr")
668traverse_RDR            = varQual_RDR dATA_TRAVERSABLE    (fsLit "traverse")
669
670----------------------
671varQual_RDR, tcQual_RDR, clsQual_RDR, dataQual_RDR
672    :: Module -> FastString -> RdrName
673varQual_RDR  mod str = mkOrig mod (mkOccNameFS varName str)
674tcQual_RDR   mod str = mkOrig mod (mkOccNameFS tcName str)
675clsQual_RDR  mod str = mkOrig mod (mkOccNameFS clsName str)
676dataQual_RDR mod str = mkOrig mod (mkOccNameFS dataName str)
677\end{code}
678
679%************************************************************************
680%*                                                                      *
681\subsection{Known-key names}
682%*                                                                      *
683%************************************************************************
684
685Many of these Names are not really "built in", but some parts of the
686compiler (notably the deriving mechanism) need to mention their names,
687and it's convenient to write them all down in one place.
688
689--MetaHaskell Extension  add the constrs and the lower case case
690-- guys as well (perhaps) e.g. see  trueDataConName     below
691
692
693\begin{code}
694wildCardName :: Name
695wildCardName = mkSystemVarName wildCardKey (fsLit "wild")
696
697runMainIOName :: Name
698runMainIOName = varQual gHC_TOP_HANDLER (fsLit "runMainIO") runMainKey
699
700orderingTyConName, ltDataConName, eqDataConName, gtDataConName :: Name
701orderingTyConName = tcQual   gHC_TYPES (fsLit "Ordering") orderingTyConKey
702ltDataConName = conName gHC_TYPES (fsLit "LT") ltDataConKey
703eqDataConName = conName gHC_TYPES (fsLit "EQ") eqDataConKey
704gtDataConName = conName gHC_TYPES (fsLit "GT") gtDataConKey
705
706eitherTyConName, leftDataConName, rightDataConName :: Name
707eitherTyConName   = tcQual  dATA_EITHER (fsLit "Either") eitherTyConKey
708leftDataConName   = conName dATA_EITHER (fsLit "Left")   leftDataConKey
709rightDataConName  = conName dATA_EITHER (fsLit "Right")  rightDataConKey
710
711-- Generics (types)
712v1TyConName, u1TyConName, par1TyConName, rec1TyConName,
713  k1TyConName, m1TyConName, sumTyConName, prodTyConName,
714  compTyConName, rTyConName, pTyConName, dTyConName,
715  cTyConName, sTyConName, rec0TyConName, par0TyConName,
716  d1TyConName, c1TyConName, s1TyConName, noSelTyConName,
717  repTyConName, rep1TyConName :: Name
718
719v1TyConName  = tcQual gHC_GENERICS (fsLit "V1") v1TyConKey
720u1TyConName  = tcQual gHC_GENERICS (fsLit "U1") u1TyConKey
721par1TyConName  = tcQual gHC_GENERICS (fsLit "Par1") par1TyConKey
722rec1TyConName  = tcQual gHC_GENERICS (fsLit "Rec1") rec1TyConKey
723k1TyConName  = tcQual gHC_GENERICS (fsLit "K1") k1TyConKey
724m1TyConName  = tcQual gHC_GENERICS (fsLit "M1") m1TyConKey
725
726sumTyConName    = tcQual gHC_GENERICS (fsLit ":+:") sumTyConKey
727prodTyConName   = tcQual gHC_GENERICS (fsLit ":*:") prodTyConKey
728compTyConName   = tcQual gHC_GENERICS (fsLit ":.:") compTyConKey
729
730rTyConName  = tcQual gHC_GENERICS (fsLit "R") rTyConKey
731pTyConName  = tcQual gHC_GENERICS (fsLit "P") pTyConKey
732dTyConName  = tcQual gHC_GENERICS (fsLit "D") dTyConKey
733cTyConName  = tcQual gHC_GENERICS (fsLit "C") cTyConKey
734sTyConName  = tcQual gHC_GENERICS (fsLit "S") sTyConKey
735
736rec0TyConName  = tcQual gHC_GENERICS (fsLit "Rec0") rec0TyConKey
737par0TyConName  = tcQual gHC_GENERICS (fsLit "Par0") par0TyConKey
738d1TyConName  = tcQual gHC_GENERICS (fsLit "D1") d1TyConKey
739c1TyConName  = tcQual gHC_GENERICS (fsLit "C1") c1TyConKey
740s1TyConName  = tcQual gHC_GENERICS (fsLit "S1") s1TyConKey
741noSelTyConName = tcQual gHC_GENERICS (fsLit "NoSelector") noSelTyConKey
742
743repTyConName  = tcQual gHC_GENERICS (fsLit "Rep")  repTyConKey
744rep1TyConName = tcQual gHC_GENERICS (fsLit "Rep1") rep1TyConKey
745
746-- Base strings Strings
747unpackCStringName, unpackCStringFoldrName,
748    unpackCStringUtf8Name, eqStringName, stringTyConName :: Name
749unpackCStringName       = varQual gHC_CSTRING (fsLit "unpackCString#") unpackCStringIdKey
750unpackCStringFoldrName  = varQual gHC_CSTRING (fsLit "unpackFoldrCString#") unpackCStringFoldrIdKey
751unpackCStringUtf8Name   = varQual gHC_CSTRING (fsLit "unpackCStringUtf8#") unpackCStringUtf8IdKey
752eqStringName            = varQual gHC_BASE (fsLit "eqString")  eqStringIdKey
753stringTyConName         = tcQual  gHC_BASE (fsLit "String") stringTyConKey
754
755-- The 'inline' function
756inlineIdName :: Name
757inlineIdName            = varQual gHC_MAGIC (fsLit "inline") inlineIdKey
758
759-- The 'undefined' function. Used by supercompilation.
760undefinedName :: Name
761undefinedName = varQual gHC_ERR (fsLit "undefined") undefinedKey
762
763-- Base classes (Eq, Ord, Functor)
764fmapName, eqClassName, eqName, ordClassName, geName, functorClassName :: Name
765eqClassName       = clsQual  gHC_CLASSES (fsLit "Eq")      eqClassKey
766eqName            = methName gHC_CLASSES (fsLit "==")      eqClassOpKey
767ordClassName      = clsQual  gHC_CLASSES (fsLit "Ord")     ordClassKey
768geName            = methName gHC_CLASSES (fsLit ">=")      geClassOpKey
769functorClassName  = clsQual  gHC_BASE (fsLit "Functor") functorClassKey
770fmapName          = methName gHC_BASE (fsLit "fmap")    fmapClassOpKey
771
772-- Class Monad
773monadClassName, thenMName, bindMName, returnMName, failMName :: Name
774monadClassName     = clsQual  gHC_BASE (fsLit "Monad")  monadClassKey
775thenMName          = methName gHC_BASE (fsLit ">>")     thenMClassOpKey
776bindMName          = methName gHC_BASE (fsLit ">>=")    bindMClassOpKey
777returnMName        = methName gHC_BASE (fsLit "return") returnMClassOpKey
778failMName          = methName gHC_BASE (fsLit "fail")   failMClassOpKey
779
780-- Classes (Applicative, Foldable, Traversable)
781applicativeClassName, foldableClassName, traversableClassName :: Name
782applicativeClassName  = clsQual  cONTROL_APPLICATIVE (fsLit "Applicative") applicativeClassKey
783foldableClassName     = clsQual  dATA_FOLDABLE       (fsLit "Foldable")    foldableClassKey
784traversableClassName  = clsQual  dATA_TRAVERSABLE    (fsLit "Traversable") traversableClassKey
785
786-- Functions for GHC extensions
787groupWithName :: Name
788groupWithName = varQual gHC_EXTS (fsLit "groupWith") groupWithIdKey
789
790-- Random PrelBase functions
791fromStringName, otherwiseIdName, foldrName, buildName, augmentName,
792    mapName, appendName, assertName,
793    breakpointName, breakpointCondName, breakpointAutoName,
794    dollarName, opaqueTyConName :: Name
795fromStringName = methName dATA_STRING (fsLit "fromString") fromStringClassOpKey
796otherwiseIdName   = varQual gHC_BASE (fsLit "otherwise")  otherwiseIdKey
797foldrName         = varQual gHC_BASE (fsLit "foldr")      foldrIdKey
798buildName         = varQual gHC_BASE (fsLit "build")      buildIdKey
799augmentName       = varQual gHC_BASE (fsLit "augment")    augmentIdKey
800mapName           = varQual gHC_BASE (fsLit "map")        mapIdKey
801appendName        = varQual gHC_BASE (fsLit "++")         appendIdKey
802dollarName        = varQual gHC_BASE (fsLit "$")          dollarIdKey
803assertName        = varQual gHC_BASE (fsLit "assert")     assertIdKey
804breakpointName    = varQual gHC_BASE (fsLit "breakpoint") breakpointIdKey
805breakpointCondName= varQual gHC_BASE (fsLit "breakpointCond") breakpointCondIdKey
806breakpointAutoName= varQual gHC_BASE (fsLit "breakpointAuto") breakpointAutoIdKey
807opaqueTyConName   = tcQual  gHC_BASE (fsLit "Opaque")   opaqueTyConKey
808
809breakpointJumpName :: Name
810breakpointJumpName
811    = mkInternalName
812        breakpointJumpIdKey
813        (mkOccNameFS varName (fsLit "breakpointJump"))
814        noSrcSpan
815breakpointCondJumpName :: Name
816breakpointCondJumpName
817    = mkInternalName
818        breakpointCondJumpIdKey
819        (mkOccNameFS varName (fsLit "breakpointCondJump"))
820        noSrcSpan
821breakpointAutoJumpName :: Name
822breakpointAutoJumpName
823    = mkInternalName
824        breakpointAutoJumpIdKey
825        (mkOccNameFS varName (fsLit "breakpointAutoJump"))
826        noSrcSpan
827
828-- PrelTup
829fstName, sndName :: Name
830fstName           = varQual dATA_TUPLE (fsLit "fst") fstIdKey
831sndName           = varQual dATA_TUPLE (fsLit "snd") sndIdKey
832
833-- Module GHC.Num
834numClassName, fromIntegerName, minusName, negateName :: Name
835numClassName      = clsQual  gHC_NUM (fsLit "Num") numClassKey
836fromIntegerName   = methName gHC_NUM (fsLit "fromInteger") fromIntegerClassOpKey
837minusName         = methName gHC_NUM (fsLit "-") minusClassOpKey
838negateName        = methName gHC_NUM (fsLit "negate") negateClassOpKey
839
840integerTyConName, mkIntegerName,
841    integerToWord64Name, integerToInt64Name,
842    plusIntegerName, timesIntegerName, smallIntegerName,
843    integerToWordName, integerToIntName, minusIntegerName,
844    negateIntegerName, eqIntegerName, neqIntegerName,
845    absIntegerName, signumIntegerName,
846    leIntegerName, gtIntegerName, ltIntegerName, geIntegerName,
847    compareIntegerName, quotRemIntegerName, divModIntegerName,
848    quotIntegerName, remIntegerName,
849    floatFromIntegerName, doubleFromIntegerName,
850    encodeFloatIntegerName, encodeDoubleIntegerName,
851    gcdIntegerName, lcmIntegerName,
852    andIntegerName, orIntegerName, xorIntegerName, complementIntegerName,
853    shiftLIntegerName, shiftRIntegerName :: Name
854integerTyConName      = tcQual  gHC_INTEGER_TYPE (fsLit "Integer")           integerTyConKey
855mkIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "mkInteger")         mkIntegerIdKey
856integerToWord64Name   = varQual gHC_INTEGER_TYPE (fsLit "integerToWord64")   integerToWord64IdKey
857integerToInt64Name    = varQual gHC_INTEGER_TYPE (fsLit "integerToInt64")    integerToInt64IdKey
858plusIntegerName       = varQual gHC_INTEGER_TYPE (fsLit "plusInteger")       plusIntegerIdKey
859timesIntegerName      = varQual gHC_INTEGER_TYPE (fsLit "timesInteger")      timesIntegerIdKey
860smallIntegerName      = varQual gHC_INTEGER_TYPE (fsLit "smallInteger")      smallIntegerIdKey
861integerToWordName     = varQual gHC_INTEGER_TYPE (fsLit "integerToWord")     integerToWordIdKey
862integerToIntName      = varQual gHC_INTEGER_TYPE (fsLit "integerToInt")      integerToIntIdKey
863minusIntegerName      = varQual gHC_INTEGER_TYPE (fsLit "minusInteger")      minusIntegerIdKey
864negateIntegerName     = varQual gHC_INTEGER_TYPE (fsLit "negateInteger")     negateIntegerIdKey
865eqIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "eqInteger")         eqIntegerIdKey
866neqIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "neqInteger")        neqIntegerIdKey
867absIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "absInteger")        absIntegerIdKey
868signumIntegerName     = varQual gHC_INTEGER_TYPE (fsLit "signumInteger")     signumIntegerIdKey
869leIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "leInteger")         leIntegerIdKey
870gtIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "gtInteger")         gtIntegerIdKey
871ltIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "ltInteger")         ltIntegerIdKey
872geIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "geInteger")         geIntegerIdKey
873compareIntegerName    = varQual gHC_INTEGER_TYPE (fsLit "compareInteger")    compareIntegerIdKey
874quotRemIntegerName    = varQual gHC_INTEGER_TYPE (fsLit "quotRemInteger")    quotRemIntegerIdKey
875divModIntegerName     = varQual gHC_INTEGER_TYPE (fsLit "divModInteger")     divModIntegerIdKey
876quotIntegerName       = varQual gHC_INTEGER_TYPE (fsLit "quotInteger")       quotIntegerIdKey
877remIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "remInteger")        remIntegerIdKey
878floatFromIntegerName  = varQual gHC_INTEGER_TYPE (fsLit "floatFromInteger")      floatFromIntegerIdKey
879doubleFromIntegerName = varQual gHC_INTEGER_TYPE (fsLit "doubleFromInteger")     doubleFromIntegerIdKey
880encodeFloatIntegerName  = varQual gHC_INTEGER_TYPE (fsLit "encodeFloatInteger")  encodeFloatIntegerIdKey
881encodeDoubleIntegerName = varQual gHC_INTEGER_TYPE (fsLit "encodeDoubleInteger") encodeDoubleIntegerIdKey
882gcdIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "gcdInteger")        gcdIntegerIdKey
883lcmIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "lcmInteger")        lcmIntegerIdKey
884andIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "andInteger")        andIntegerIdKey
885orIntegerName         = varQual gHC_INTEGER_TYPE (fsLit "orInteger")         orIntegerIdKey
886xorIntegerName        = varQual gHC_INTEGER_TYPE (fsLit "xorInteger")        xorIntegerIdKey
887complementIntegerName = varQual gHC_INTEGER_TYPE (fsLit "complementInteger") complementIntegerIdKey
888shiftLIntegerName     = varQual gHC_INTEGER_TYPE (fsLit "shiftLInteger")     shiftLIntegerIdKey
889shiftRIntegerName     = varQual gHC_INTEGER_TYPE (fsLit "shiftRInteger")     shiftRIntegerIdKey
890
891-- GHC.Real types and classes
892rationalTyConName, ratioTyConName, ratioDataConName, realClassName,
893    integralClassName, realFracClassName, fractionalClassName,
894    fromRationalName, toIntegerName, toRationalName, fromIntegralName,
895    realToFracName :: Name
896rationalTyConName   = tcQual  gHC_REAL (fsLit "Rational") rationalTyConKey
897ratioTyConName      = tcQual  gHC_REAL (fsLit "Ratio") ratioTyConKey
898ratioDataConName    = conName gHC_REAL (fsLit ":%") ratioDataConKey
899realClassName       = clsQual gHC_REAL (fsLit "Real") realClassKey
900integralClassName   = clsQual gHC_REAL (fsLit "Integral") integralClassKey
901realFracClassName   = clsQual gHC_REAL (fsLit "RealFrac") realFracClassKey
902fractionalClassName = clsQual gHC_REAL (fsLit "Fractional") fractionalClassKey
903fromRationalName    = methName gHC_REAL (fsLit "fromRational") fromRationalClassOpKey
904toIntegerName       = methName gHC_REAL (fsLit "toInteger") toIntegerClassOpKey
905toRationalName      = methName gHC_REAL (fsLit "toRational") toRationalClassOpKey
906fromIntegralName    = varQual  gHC_REAL (fsLit "fromIntegral") fromIntegralIdKey
907realToFracName      = varQual  gHC_REAL (fsLit "realToFrac") realToFracIdKey
908
909-- PrelFloat classes
910floatingClassName, realFloatClassName :: Name
911floatingClassName  = clsQual  gHC_FLOAT (fsLit "Floating") floatingClassKey
912realFloatClassName = clsQual  gHC_FLOAT (fsLit "RealFloat") realFloatClassKey
913
914-- Class Ix
915ixClassName :: Name
916ixClassName = clsQual gHC_ARR (fsLit "Ix") ixClassKey
917
918-- Class Typeable
919typeableClassName, typeable1ClassName, typeable2ClassName,
920    typeable3ClassName, typeable4ClassName, typeable5ClassName,
921    typeable6ClassName, typeable7ClassName :: Name
922typeableClassName  = clsQual tYPEABLE_INTERNAL (fsLit "Typeable") typeableClassKey
923typeable1ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable1") typeable1ClassKey
924typeable2ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable2") typeable2ClassKey
925typeable3ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable3") typeable3ClassKey
926typeable4ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable4") typeable4ClassKey
927typeable5ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable5") typeable5ClassKey
928typeable6ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable6") typeable6ClassKey
929typeable7ClassName = clsQual tYPEABLE_INTERNAL (fsLit "Typeable7") typeable7ClassKey
930
931typeableClassNames :: [Name]
932typeableClassNames =    [ typeableClassName, typeable1ClassName, typeable2ClassName
933                        , typeable3ClassName, typeable4ClassName, typeable5ClassName
934                        , typeable6ClassName, typeable7ClassName ]
935
936-- Class Data
937dataClassName :: Name
938dataClassName = clsQual gENERICS (fsLit "Data") dataClassKey
939
940-- Error module
941assertErrorName    :: Name
942assertErrorName   = varQual gHC_IO_Exception (fsLit "assertError") assertErrorIdKey
943
944-- Enum module (Enum, Bounded)
945enumClassName, enumFromName, enumFromToName, enumFromThenName,
946    enumFromThenToName, boundedClassName :: Name
947enumClassName      = clsQual gHC_ENUM (fsLit "Enum") enumClassKey
948enumFromName       = methName gHC_ENUM (fsLit "enumFrom") enumFromClassOpKey
949enumFromToName     = methName gHC_ENUM (fsLit "enumFromTo") enumFromToClassOpKey
950enumFromThenName   = methName gHC_ENUM (fsLit "enumFromThen") enumFromThenClassOpKey
951enumFromThenToName = methName gHC_ENUM (fsLit "enumFromThenTo") enumFromThenToClassOpKey
952boundedClassName   = clsQual gHC_ENUM (fsLit "Bounded") boundedClassKey
953
954-- List functions
955concatName, filterName, zipName :: Name
956concatName        = varQual gHC_LIST (fsLit "concat") concatIdKey
957filterName        = varQual gHC_LIST (fsLit "filter") filterIdKey
958zipName           = varQual gHC_LIST (fsLit "zip") zipIdKey
959
960-- Class Show
961showClassName :: Name
962showClassName     = clsQual gHC_SHOW (fsLit "Show")       showClassKey
963
964-- Class Read
965readClassName :: Name
966readClassName      = clsQual gHC_READ (fsLit "Read") readClassKey
967
968-- Classes Generic and Generic1, Datatype, Constructor and Selector
969genClassName, gen1ClassName, datatypeClassName, constructorClassName,
970  selectorClassName :: Name
971genClassName  = clsQual gHC_GENERICS (fsLit "Generic")  genClassKey
972gen1ClassName = clsQual gHC_GENERICS (fsLit "Generic1") gen1ClassKey
973
974datatypeClassName = clsQual gHC_GENERICS (fsLit "Datatype") datatypeClassKey
975constructorClassName = clsQual gHC_GENERICS (fsLit "Constructor") constructorClassKey
976selectorClassName = clsQual gHC_GENERICS (fsLit "Selector") selectorClassKey
977
978-- GHCi things
979ghciIoClassName, ghciStepIoMName :: Name
980ghciIoClassName = clsQual gHC_GHCI (fsLit "GHCiSandboxIO") ghciIoClassKey
981ghciStepIoMName = methName gHC_GHCI (fsLit "ghciStepIO") ghciStepIoMClassOpKey
982
983-- IO things
984ioTyConName, ioDataConName, thenIOName, bindIOName, returnIOName,
985    failIOName :: Name
986ioTyConName       = tcQual  gHC_TYPES (fsLit "IO") ioTyConKey
987ioDataConName     = conName gHC_TYPES (fsLit "IO") ioDataConKey
988thenIOName        = varQual gHC_BASE (fsLit "thenIO") thenIOIdKey
989bindIOName        = varQual gHC_BASE (fsLit "bindIO") bindIOIdKey
990returnIOName      = varQual gHC_BASE (fsLit "returnIO") returnIOIdKey
991failIOName        = varQual gHC_IO (fsLit "failIO") failIOIdKey
992
993-- IO things
994printName :: Name
995printName         = varQual sYSTEM_IO (fsLit "print") printIdKey
996
997-- Int, Word, and Addr things
998int8TyConName, int16TyConName, int32TyConName, int64TyConName :: Name
999int8TyConName     = tcQual gHC_INT  (fsLit "Int8") int8TyConKey
1000int16TyConName    = tcQual gHC_INT  (fsLit "Int16") int16TyConKey
1001int32TyConName    = tcQual gHC_INT  (fsLit "Int32") int32TyConKey
1002int64TyConName    = tcQual gHC_INT  (fsLit "Int64") int64TyConKey
1003
1004-- Word module
1005word8TyConName, word16TyConName, word32TyConName, word64TyConName,
1006    wordTyConName, wordDataConName :: Name
1007word8TyConName    = tcQual  gHC_WORD (fsLit "Word8")  word8TyConKey
1008word16TyConName   = tcQual  gHC_WORD (fsLit "Word16") word16TyConKey
1009word32TyConName   = tcQual  gHC_WORD (fsLit "Word32") word32TyConKey
1010word64TyConName   = tcQual  gHC_WORD (fsLit "Word64") word64TyConKey
1011wordTyConName     = tcQual  gHC_TYPES (fsLit "Word")   wordTyConKey
1012wordDataConName   = conName gHC_TYPES (fsLit "W#") wordDataConKey
1013
1014-- PrelPtr module
1015ptrTyConName, funPtrTyConName :: Name
1016ptrTyConName      = tcQual   gHC_PTR (fsLit "Ptr") ptrTyConKey
1017funPtrTyConName   = tcQual   gHC_PTR (fsLit "FunPtr") funPtrTyConKey
1018
1019-- Foreign objects and weak pointers
1020stablePtrTyConName, newStablePtrName :: Name
1021stablePtrTyConName    = tcQual   gHC_STABLE (fsLit "StablePtr") stablePtrTyConKey
1022newStablePtrName      = varQual  gHC_STABLE (fsLit "newStablePtr") newStablePtrIdKey
1023
1024-- PrelST module
1025runSTRepName :: Name
1026runSTRepName       = varQual gHC_ST  (fsLit "runSTRep") runSTRepIdKey
1027
1028-- Recursive-do notation
1029monadFixClassName, mfixName :: Name
1030monadFixClassName  = clsQual mONAD_FIX (fsLit "MonadFix") monadFixClassKey
1031mfixName           = methName mONAD_FIX (fsLit "mfix") mfixIdKey
1032
1033-- Arrow notation
1034arrAName, composeAName, firstAName, appAName, choiceAName, loopAName :: Name
1035arrAName           = varQual aRROW (fsLit "arr")          arrAIdKey
1036composeAName       = varQual gHC_DESUGAR (fsLit ">>>") composeAIdKey
1037firstAName         = varQual aRROW (fsLit "first") firstAIdKey
1038appAName           = varQual aRROW (fsLit "app")          appAIdKey
1039choiceAName        = varQual aRROW (fsLit "|||")          choiceAIdKey
1040loopAName          = varQual aRROW (fsLit "loop")  loopAIdKey
1041
1042-- Monad comprehensions
1043guardMName, liftMName, mzipName :: Name
1044guardMName         = varQual mONAD (fsLit "guard") guardMIdKey
1045liftMName          = varQual mONAD (fsLit "liftM") liftMIdKey
1046mzipName           = varQual mONAD_ZIP (fsLit "mzip") mzipIdKey
1047
1048
1049-- Annotation type checking
1050toAnnotationWrapperName :: Name
1051toAnnotationWrapperName = varQual gHC_DESUGAR (fsLit "toAnnotationWrapper") toAnnotationWrapperIdKey
1052
1053-- Other classes, needed for type defaulting
1054monadPlusClassName, randomClassName, randomGenClassName,
1055    isStringClassName :: Name
1056monadPlusClassName  = clsQual mONAD (fsLit "MonadPlus")  monadPlusClassKey
1057randomClassName     = clsQual rANDOM (fsLit "Random")    randomClassKey
1058randomGenClassName  = clsQual rANDOM (fsLit "RandomGen") randomGenClassKey
1059isStringClassName   = clsQual dATA_STRING (fsLit "IsString") isStringClassKey
1060
1061-- Type-level naturals
1062typeNatKindConName, typeStringKindConName,
1063  singIClassName, typeNatLeqClassName,
1064  typeNatAddTyFamName, typeNatMulTyFamName, typeNatExpTyFamName :: Name
1065typeNatKindConName    = tcQual gHC_TYPELITS (fsLit "Nat")  typeNatKindConNameKey
1066typeStringKindConName = tcQual gHC_TYPELITS (fsLit "Symbol")
1067                                                        typeStringKindConNameKey
1068singIClassName      = clsQual gHC_TYPELITS (fsLit "SingI") singIClassNameKey
1069typeNatLeqClassName = clsQual gHC_TYPELITS (fsLit "<=")  typeNatLeqClassNameKey
1070typeNatAddTyFamName = tcQual  gHC_TYPELITS (fsLit "+")   typeNatAddTyFamNameKey
1071typeNatMulTyFamName = tcQual  gHC_TYPELITS (fsLit "*")   typeNatMulTyFamNameKey
1072typeNatExpTyFamName = tcQual  gHC_TYPELITS (fsLit "^")   typeNatExpTyFamNameKey
1073
1074-- dotnet interop
1075objectTyConName :: Name
1076objectTyConName     = tcQual   dOTNET (fsLit "Object") objectTyConKey
1077        -- objectTyConName was "wTcQual", but that's gone now, and
1078        -- I can't see why it was wired in anyway...
1079unmarshalObjectName, marshalObjectName, marshalStringName,
1080    unmarshalStringName, checkDotnetResName :: Name
1081unmarshalObjectName = varQual  dOTNET (fsLit "unmarshalObject") unmarshalObjectIdKey
1082marshalObjectName   = varQual  dOTNET (fsLit "marshalObject") marshalObjectIdKey
1083marshalStringName   = varQual  dOTNET (fsLit "marshalString") marshalStringIdKey
1084unmarshalStringName = varQual  dOTNET (fsLit "unmarshalString") unmarshalStringIdKey
1085checkDotnetResName  = varQual  dOTNET (fsLit "checkResult")     checkDotnetResNameIdKey
1086
1087-- plugins
1088cORE_MONAD :: Module
1089cORE_MONAD = mkThisGhcModule (fsLit "CoreMonad")
1090pluginTyConName :: Name
1091pluginTyConName = tcQual cORE_MONAD (fsLit "Plugin") pluginTyConKey
1092\end{code}
1093
1094%************************************************************************
1095%*                                                                      *
1096\subsection{Local helpers}
1097%*                                                                      *
1098%************************************************************************
1099
1100All these are original names; hence mkOrig
1101
1102\begin{code}
1103varQual, tcQual, clsQual :: Module -> FastString -> Unique -> Name
1104varQual  = mk_known_key_name varName
1105tcQual   = mk_known_key_name tcName
1106clsQual  = mk_known_key_name clsName
1107
1108mk_known_key_name :: NameSpace -> Module -> FastString -> Unique -> Name
1109mk_known_key_name space modu str unique
1110  = mkExternalName unique modu (mkOccNameFS space str) noSrcSpan
1111
1112conName :: Module -> FastString -> Unique -> Name
1113conName modu occ unique
1114  = mkExternalName unique modu (mkOccNameFS dataName occ) noSrcSpan
1115
1116methName :: Module -> FastString -> Unique -> Name
1117methName modu occ unique
1118  = mkExternalName unique modu (mkVarOccFS occ) noSrcSpan
1119\end{code}
1120
1121%************************************************************************
1122%*                                                                      *
1123\subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
1124%*                                                                      *
1125%************************************************************************
1126--MetaHaskell extension hand allocate keys here
1127
1128\begin{code}
1129boundedClassKey, enumClassKey, eqClassKey, floatingClassKey,
1130    fractionalClassKey, integralClassKey, monadClassKey, dataClassKey,
1131    functorClassKey, numClassKey, ordClassKey, readClassKey, realClassKey,
1132    realFloatClassKey, realFracClassKey, showClassKey, ixClassKey :: Unique
1133boundedClassKey         = mkPreludeClassUnique 1
1134enumClassKey            = mkPreludeClassUnique 2
1135eqClassKey              = mkPreludeClassUnique 3
1136floatingClassKey        = mkPreludeClassUnique 5
1137fractionalClassKey      = mkPreludeClassUnique 6
1138integralClassKey        = mkPreludeClassUnique 7
1139monadClassKey           = mkPreludeClassUnique 8
1140dataClassKey            = mkPreludeClassUnique 9
1141functorClassKey         = mkPreludeClassUnique 10
1142numClassKey             = mkPreludeClassUnique 11
1143ordClassKey             = mkPreludeClassUnique 12
1144readClassKey            = mkPreludeClassUnique 13
1145realClassKey            = mkPreludeClassUnique 14
1146realFloatClassKey       = mkPreludeClassUnique 15
1147realFracClassKey        = mkPreludeClassUnique 16
1148showClassKey            = mkPreludeClassUnique 17
1149ixClassKey              = mkPreludeClassUnique 18
1150
1151typeableClassKey, typeable1ClassKey, typeable2ClassKey, typeable3ClassKey,
1152    typeable4ClassKey, typeable5ClassKey, typeable6ClassKey, typeable7ClassKey
1153    :: Unique
1154typeableClassKey        = mkPreludeClassUnique 20
1155typeable1ClassKey       = mkPreludeClassUnique 21
1156typeable2ClassKey       = mkPreludeClassUnique 22
1157typeable3ClassKey       = mkPreludeClassUnique 23
1158typeable4ClassKey       = mkPreludeClassUnique 24
1159typeable5ClassKey       = mkPreludeClassUnique 25
1160typeable6ClassKey       = mkPreludeClassUnique 26
1161typeable7ClassKey       = mkPreludeClassUnique 27
1162
1163monadFixClassKey :: Unique
1164monadFixClassKey        = mkPreludeClassUnique 28
1165
1166monadPlusClassKey, randomClassKey, randomGenClassKey :: Unique
1167monadPlusClassKey       = mkPreludeClassUnique 30
1168randomClassKey          = mkPreludeClassUnique 31
1169randomGenClassKey       = mkPreludeClassUnique 32
1170
1171isStringClassKey :: Unique
1172isStringClassKey        = mkPreludeClassUnique 33
1173
1174applicativeClassKey, foldableClassKey, traversableClassKey :: Unique
1175applicativeClassKey     = mkPreludeClassUnique 34
1176foldableClassKey        = mkPreludeClassUnique 35
1177traversableClassKey     = mkPreludeClassUnique 36
1178
1179genClassKey, gen1ClassKey, datatypeClassKey, constructorClassKey,
1180  selectorClassKey :: Unique
1181genClassKey   = mkPreludeClassUnique 37
1182gen1ClassKey  = mkPreludeClassUnique 38
1183
1184datatypeClassKey    = mkPreludeClassUnique 39
1185constructorClassKey = mkPreludeClassUnique 40
1186selectorClassKey    = mkPreludeClassUnique 41
1187
1188singIClassNameKey, typeNatLeqClassNameKey :: Unique
1189singIClassNameKey       = mkPreludeClassUnique 42
1190typeNatLeqClassNameKey  = mkPreludeClassUnique 43
1191
1192ghciIoClassKey :: Unique
1193ghciIoClassKey = mkPreludeClassUnique 44
1194\end{code}
1195
1196%************************************************************************
1197%*                                                                      *
1198\subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
1199%*                                                                      *
1200%************************************************************************
1201
1202\begin{code}
1203addrPrimTyConKey, arrayPrimTyConKey, arrayArrayPrimTyConKey, boolTyConKey, byteArrayPrimTyConKey,
1204    charPrimTyConKey, charTyConKey, doublePrimTyConKey, doubleTyConKey,
1205    floatPrimTyConKey, floatTyConKey, funTyConKey, intPrimTyConKey,
1206    intTyConKey, int8TyConKey, int16TyConKey, int32PrimTyConKey,
1207    int32TyConKey, int64PrimTyConKey, int64TyConKey,
1208    integerTyConKey, digitsTyConKey,
1209    listTyConKey, foreignObjPrimTyConKey, weakPrimTyConKey,
1210    mutableArrayPrimTyConKey, mutableArrayArrayPrimTyConKey, mutableByteArrayPrimTyConKey,
1211    orderingTyConKey, mVarPrimTyConKey, ratioTyConKey, rationalTyConKey,
1212    realWorldTyConKey, stablePtrPrimTyConKey, stablePtrTyConKey,
1213    anyTyConKey, eqTyConKey :: Unique
1214addrPrimTyConKey                        = mkPreludeTyConUnique  1
1215arrayPrimTyConKey                       = mkPreludeTyConUnique  3
1216boolTyConKey                            = mkPreludeTyConUnique  4
1217byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
1218charPrimTyConKey                        = mkPreludeTyConUnique  7
1219charTyConKey                            = mkPreludeTyConUnique  8
1220doublePrimTyConKey                      = mkPreludeTyConUnique  9
1221doubleTyConKey                          = mkPreludeTyConUnique 10
1222floatPrimTyConKey                       = mkPreludeTyConUnique 11
1223floatTyConKey                           = mkPreludeTyConUnique 12
1224funTyConKey                             = mkPreludeTyConUnique 13
1225intPrimTyConKey                         = mkPreludeTyConUnique 14
1226intTyConKey                             = mkPreludeTyConUnique 15
1227int8TyConKey                            = mkPreludeTyConUnique 16
1228int16TyConKey                           = mkPreludeTyConUnique 17
1229int32PrimTyConKey                       = mkPreludeTyConUnique 18
1230int32TyConKey                           = mkPreludeTyConUnique 19
1231int64PrimTyConKey                       = mkPreludeTyConUnique 20
1232int64TyConKey                           = mkPreludeTyConUnique 21
1233integerTyConKey                         = mkPreludeTyConUnique 22
1234digitsTyConKey                          = mkPreludeTyConUnique 23
1235listTyConKey                            = mkPreludeTyConUnique 24
1236foreignObjPrimTyConKey                  = mkPreludeTyConUnique 25
1237weakPrimTyConKey                        = mkPreludeTyConUnique 27
1238mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
1239mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
1240orderingTyConKey                        = mkPreludeTyConUnique 30
1241mVarPrimTyConKey                        = mkPreludeTyConUnique 31
1242ratioTyConKey                           = mkPreludeTyConUnique 32
1243rationalTyConKey                        = mkPreludeTyConUnique 33
1244realWorldTyConKey                       = mkPreludeTyConUnique 34
1245stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
1246stablePtrTyConKey                       = mkPreludeTyConUnique 36
1247anyTyConKey                             = mkPreludeTyConUnique 37
1248eqTyConKey                              = mkPreludeTyConUnique 38
1249arrayArrayPrimTyConKey                  = mkPreludeTyConUnique 39
1250mutableArrayArrayPrimTyConKey           = mkPreludeTyConUnique 40
1251
1252statePrimTyConKey, stableNamePrimTyConKey, stableNameTyConKey,
1253    mutVarPrimTyConKey, ioTyConKey,
1254    wordPrimTyConKey, wordTyConKey, word8TyConKey, word16TyConKey,
1255    word32PrimTyConKey, word32TyConKey, word64PrimTyConKey, word64TyConKey,
1256    liftedConKey, unliftedConKey, anyBoxConKey, kindConKey, boxityConKey,
1257    typeConKey, threadIdPrimTyConKey, bcoPrimTyConKey, ptrTyConKey,
1258    funPtrTyConKey, tVarPrimTyConKey, eqPrimTyConKey :: Unique
1259statePrimTyConKey                       = mkPreludeTyConUnique 50
1260stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
1261stableNameTyConKey                      = mkPreludeTyConUnique 52
1262eqPrimTyConKey                          = mkPreludeTyConUnique 53
1263mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
1264ioTyConKey                              = mkPreludeTyConUnique 56
1265wordPrimTyConKey                        = mkPreludeTyConUnique 58
1266wordTyConKey                            = mkPreludeTyConUnique 59
1267word8TyConKey                           = mkPreludeTyConUnique 60
1268word16TyConKey                          = mkPreludeTyConUnique 61
1269word32PrimTyConKey                      = mkPreludeTyConUnique 62
1270word32TyConKey                          = mkPreludeTyConUnique 63
1271word64PrimTyConKey                      = mkPreludeTyConUnique 64
1272word64TyConKey                          = mkPreludeTyConUnique 65
1273liftedConKey                            = mkPreludeTyConUnique 66
1274unliftedConKey                          = mkPreludeTyConUnique 67
1275anyBoxConKey                            = mkPreludeTyConUnique 68
1276kindConKey                              = mkPreludeTyConUnique 69
1277boxityConKey                            = mkPreludeTyConUnique 70
1278typeConKey                              = mkPreludeTyConUnique 71
1279threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
1280bcoPrimTyConKey                         = mkPreludeTyConUnique 73
1281ptrTyConKey                             = mkPreludeTyConUnique 74
1282funPtrTyConKey                          = mkPreludeTyConUnique 75
1283tVarPrimTyConKey                        = mkPreludeTyConUnique 76
1284
1285-- Parallel array type constructor
1286parrTyConKey :: Unique
1287parrTyConKey                            = mkPreludeTyConUnique 82
1288
1289-- dotnet interop
1290objectTyConKey :: Unique
1291objectTyConKey                          = mkPreludeTyConUnique 83
1292
1293eitherTyConKey :: Unique
1294eitherTyConKey                          = mkPreludeTyConUnique 84
1295
1296-- Super Kinds constructors
1297superKindTyConKey :: Unique
1298superKindTyConKey                     = mkPreludeTyConUnique 85
1299
1300-- Kind constructors
1301liftedTypeKindTyConKey, anyKindTyConKey, openTypeKindTyConKey,
1302  unliftedTypeKindTyConKey, ubxTupleKindTyConKey, argTypeKindTyConKey,
1303  constraintKindTyConKey :: Unique
1304anyKindTyConKey                         = mkPreludeTyConUnique 86
1305liftedTypeKindTyConKey                  = mkPreludeTyConUnique 87
1306openTypeKindTyConKey                    = mkPreludeTyConUnique 88
1307unliftedTypeKindTyConKey                = mkPreludeTyConUnique 89
1308ubxTupleKindTyConKey                    = mkPreludeTyConUnique 90
1309argTypeKindTyConKey                     = mkPreludeTyConUnique 91
1310constraintKindTyConKey                  = mkPreludeTyConUnique 92
1311
1312-- Coercion constructors
1313symCoercionTyConKey, transCoercionTyConKey, leftCoercionTyConKey,
1314    rightCoercionTyConKey, instCoercionTyConKey, unsafeCoercionTyConKey,
1315    csel1CoercionTyConKey, csel2CoercionTyConKey, cselRCoercionTyConKey
1316    :: Unique
1317symCoercionTyConKey                     = mkPreludeTyConUnique 93
1318transCoercionTyConKey                   = mkPreludeTyConUnique 94
1319leftCoercionTyConKey                    = mkPreludeTyConUnique 95
1320rightCoercionTyConKey                   = mkPreludeTyConUnique 96
1321instCoercionTyConKey                    = mkPreludeTyConUnique 97
1322unsafeCoercionTyConKey                  = mkPreludeTyConUnique 98
1323csel1CoercionTyConKey                   = mkPreludeTyConUnique 99
1324csel2CoercionTyConKey                   = mkPreludeTyConUnique 100
1325cselRCoercionTyConKey                   = mkPreludeTyConUnique 101
1326
1327pluginTyConKey :: Unique
1328pluginTyConKey                          = mkPreludeTyConUnique 102
1329
1330unknownTyConKey, unknown1TyConKey, unknown2TyConKey, unknown3TyConKey,
1331    opaqueTyConKey :: Unique
1332unknownTyConKey                         = mkPreludeTyConUnique 129
1333unknown1TyConKey                        = mkPreludeTyConUnique 130
1334unknown2TyConKey                        = mkPreludeTyConUnique 131
1335unknown3TyConKey                        = mkPreludeTyConUnique 132
1336opaqueTyConKey                          = mkPreludeTyConUnique 133
1337
1338stringTyConKey :: Unique
1339stringTyConKey                          = mkPreludeTyConUnique 134
1340
1341-- Generics (Unique keys)
1342v1TyConKey, u1TyConKey, par1TyConKey, rec1TyConKey,
1343  k1TyConKey, m1TyConKey, sumTyConKey, prodTyConKey,
1344  compTyConKey, rTyConKey, pTyConKey, dTyConKey,
1345  cTyConKey, sTyConKey, rec0TyConKey, par0TyConKey,
1346  d1TyConKey, c1TyConKey, s1TyConKey, noSelTyConKey,
1347  repTyConKey, rep1TyConKey :: Unique
1348
1349v1TyConKey    = mkPreludeTyConUnique 135
1350u1TyConKey    = mkPreludeTyConUnique 136
1351par1TyConKey  = mkPreludeTyConUnique 137
1352rec1TyConKey  = mkPreludeTyConUnique 138
1353k1TyConKey    = mkPreludeTyConUnique 139
1354m1TyConKey    = mkPreludeTyConUnique 140
1355
1356sumTyConKey   = mkPreludeTyConUnique 141
1357prodTyConKey  = mkPreludeTyConUnique 142
1358compTyConKey  = mkPreludeTyConUnique 143
1359
1360rTyConKey = mkPreludeTyConUnique 144
1361pTyConKey = mkPreludeTyConUnique 145
1362dTyConKey = mkPreludeTyConUnique 146
1363cTyConKey = mkPreludeTyConUnique 147
1364sTyConKey = mkPreludeTyConUnique 148
1365
1366rec0TyConKey  = mkPreludeTyConUnique 149
1367par0TyConKey  = mkPreludeTyConUnique 150
1368d1TyConKey    = mkPreludeTyConUnique 151
1369c1TyConKey    = mkPreludeTyConUnique 152
1370s1TyConKey    = mkPreludeTyConUnique 153
1371noSelTyConKey = mkPreludeTyConUnique 154
1372
1373repTyConKey  = mkPreludeTyConUnique 155
1374rep1TyConKey = mkPreludeTyConUnique 156
1375
1376-- Type-level naturals
1377typeNatKindConNameKey, typeStringKindConNameKey,
1378  typeNatAddTyFamNameKey, typeNatMulTyFamNameKey, typeNatExpTyFamNameKey
1379  :: Unique
1380typeNatKindConNameKey     = mkPreludeTyConUnique 160
1381typeStringKindConNameKey  = mkPreludeTyConUnique 161
1382typeNatAddTyFamNameKey    = mkPreludeTyConUnique 162
1383typeNatMulTyFamNameKey    = mkPreludeTyConUnique 163
1384typeNatExpTyFamNameKey    = mkPreludeTyConUnique 164
1385
1386---------------- Template Haskell -------------------
1387--      USES TyConUniques 200-299
1388-----------------------------------------------------
1389
1390unitTyConKey :: Unique
1391unitTyConKey = mkTupleTyConUnique BoxedTuple 0
1392\end{code}
1393
1394%************************************************************************
1395%*                                                                      *
1396\subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1397%*                                                                      *
1398%************************************************************************
1399
1400\begin{code}
1401charDataConKey, consDataConKey, doubleDataConKey, falseDataConKey,
1402    floatDataConKey, intDataConKey, nilDataConKey, ratioDataConKey,
1403    stableNameDataConKey, trueDataConKey, wordDataConKey,
1404    ioDataConKey, integerDataConKey, eqBoxDataConKey :: Unique
1405charDataConKey                          = mkPreludeDataConUnique  1
1406consDataConKey                          = mkPreludeDataConUnique  2
1407doubleDataConKey                        = mkPreludeDataConUnique  3
1408falseDataConKey                         = mkPreludeDataConUnique  4
1409floatDataConKey                         = mkPreludeDataConUnique  5
1410intDataConKey                           = mkPreludeDataConUnique  6
1411nilDataConKey                           = mkPreludeDataConUnique 11
1412ratioDataConKey                         = mkPreludeDataConUnique 12
1413stableNameDataConKey                    = mkPreludeDataConUnique 14
1414trueDataConKey                          = mkPreludeDataConUnique 15
1415wordDataConKey                          = mkPreludeDataConUnique 16
1416ioDataConKey                            = mkPreludeDataConUnique 17
1417integerDataConKey                       = mkPreludeDataConUnique 18
1418eqBoxDataConKey                         = mkPreludeDataConUnique 19
1419
1420-- Generic data constructors
1421crossDataConKey, inlDataConKey, inrDataConKey, genUnitDataConKey :: Unique
1422crossDataConKey                         = mkPreludeDataConUnique 20
1423inlDataConKey                           = mkPreludeDataConUnique 21
1424inrDataConKey                           = mkPreludeDataConUnique 22
1425genUnitDataConKey                       = mkPreludeDataConUnique 23
1426
1427-- Data constructor for parallel arrays
1428parrDataConKey :: Unique
1429parrDataConKey                          = mkPreludeDataConUnique 24
1430
1431leftDataConKey, rightDataConKey :: Unique
1432leftDataConKey                          = mkPreludeDataConUnique 25
1433rightDataConKey                         = mkPreludeDataConUnique 26
1434
1435ltDataConKey, eqDataConKey, gtDataConKey :: Unique
1436ltDataConKey                            = mkPreludeDataConUnique 27
1437eqDataConKey                            = mkPreludeDataConUnique 28
1438gtDataConKey                            = mkPreludeDataConUnique 29
1439
1440-- For integer-gmp only
1441integerGmpSDataConKey, integerGmpJDataConKey :: Unique
1442integerGmpSDataConKey                   = mkPreludeDataConUnique 30
1443integerGmpJDataConKey                   = mkPreludeDataConUnique 31
1444\end{code}
1445
1446%************************************************************************
1447%*                                                                      *
1448\subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1449%*                                                                      *
1450%************************************************************************
1451
1452\begin{code}
1453wildCardKey, absentErrorIdKey, augmentIdKey, appendIdKey,
1454    buildIdKey, errorIdKey, foldrIdKey, recSelErrorIdKey,
1455    seqIdKey, irrefutPatErrorIdKey, eqStringIdKey,
1456    noMethodBindingErrorIdKey, nonExhaustiveGuardsErrorIdKey,
1457    runtimeErrorIdKey, patErrorIdKey,
1458    realWorldPrimIdKey, recConErrorIdKey,
1459    unpackCStringUtf8IdKey, unpackCStringAppendIdKey,
1460    unpackCStringFoldrIdKey, unpackCStringIdKey :: Unique
1461wildCardKey                   = mkPreludeMiscIdUnique  0  -- See Note [WildCard]
1462absentErrorIdKey              = mkPreludeMiscIdUnique  1
1463augmentIdKey                  = mkPreludeMiscIdUnique  2
1464appendIdKey                   = mkPreludeMiscIdUnique  3
1465buildIdKey                    = mkPreludeMiscIdUnique  4
1466errorIdKey                    = mkPreludeMiscIdUnique  5
1467foldrIdKey                    = mkPreludeMiscIdUnique  6
1468recSelErrorIdKey              = mkPreludeMiscIdUnique  7
1469seqIdKey                      = mkPreludeMiscIdUnique  8
1470irrefutPatErrorIdKey          = mkPreludeMiscIdUnique  9
1471eqStringIdKey                 = mkPreludeMiscIdUnique 10
1472noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 11
1473nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 12
1474runtimeErrorIdKey             = mkPreludeMiscIdUnique 13
1475patErrorIdKey                 = mkPreludeMiscIdUnique 14
1476realWorldPrimIdKey            = mkPreludeMiscIdUnique 15
1477recConErrorIdKey              = mkPreludeMiscIdUnique 16
1478unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 17
1479unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 18
1480unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 19
1481unpackCStringIdKey            = mkPreludeMiscIdUnique 20
1482
1483unsafeCoerceIdKey, concatIdKey, filterIdKey, zipIdKey, bindIOIdKey,
1484    returnIOIdKey, newStablePtrIdKey,
1485    printIdKey, failIOIdKey, nullAddrIdKey, voidArgIdKey,
1486    fstIdKey, sndIdKey, otherwiseIdKey, assertIdKey, runSTRepIdKey :: Unique
1487unsafeCoerceIdKey             = mkPreludeMiscIdUnique 30
1488concatIdKey                   = mkPreludeMiscIdUnique 31
1489filterIdKey                   = mkPreludeMiscIdUnique 32
1490zipIdKey                      = mkPreludeMiscIdUnique 33
1491bindIOIdKey                   = mkPreludeMiscIdUnique 34
1492returnIOIdKey                 = mkPreludeMiscIdUnique 35
1493newStablePtrIdKey             = mkPreludeMiscIdUnique 36
1494printIdKey                    = mkPreludeMiscIdUnique 37
1495failIOIdKey                   = mkPreludeMiscIdUnique 38
1496nullAddrIdKey                 = mkPreludeMiscIdUnique 39
1497voidArgIdKey                  = mkPreludeMiscIdUnique 40
1498fstIdKey                      = mkPreludeMiscIdUnique 41
1499sndIdKey                      = mkPreludeMiscIdUnique 42
1500otherwiseIdKey                = mkPreludeMiscIdUnique 43
1501assertIdKey                   = mkPreludeMiscIdUnique 44
1502runSTRepIdKey                 = mkPreludeMiscIdUnique 45
1503
1504mkIntegerIdKey, smallIntegerIdKey, integerToWordIdKey, integerToIntIdKey,
1505    integerToWord64IdKey, integerToInt64IdKey,
1506    plusIntegerIdKey, timesIntegerIdKey, minusIntegerIdKey,
1507    negateIntegerIdKey,
1508    eqIntegerIdKey, neqIntegerIdKey, absIntegerIdKey, signumIntegerIdKey,
1509    leIntegerIdKey, gtIntegerIdKey, ltIntegerIdKey, geIntegerIdKey,
1510    compareIntegerIdKey, quotRemIntegerIdKey, divModIntegerIdKey,
1511    quotIntegerIdKey, remIntegerIdKey,
1512    floatFromIntegerIdKey, doubleFromIntegerIdKey,
1513    encodeFloatIntegerIdKey, encodeDoubleIntegerIdKey,
1514    gcdIntegerIdKey, lcmIntegerIdKey,
1515    andIntegerIdKey, orIntegerIdKey, xorIntegerIdKey, complementIntegerIdKey,
1516    shiftLIntegerIdKey, shiftRIntegerIdKey :: Unique
1517mkIntegerIdKey                = mkPreludeMiscIdUnique 60
1518smallIntegerIdKey             = mkPreludeMiscIdUnique 61
1519integerToWordIdKey            = mkPreludeMiscIdUnique 62
1520integerToIntIdKey             = mkPreludeMiscIdUnique 63
1521integerToWord64IdKey          = mkPreludeMiscIdUnique 64
1522integerToInt64IdKey           = mkPreludeMiscIdUnique 65
1523plusIntegerIdKey              = mkPreludeMiscIdUnique 66
1524timesIntegerIdKey             = mkPreludeMiscIdUnique 67
1525minusIntegerIdKey             = mkPreludeMiscIdUnique 68
1526negateIntegerIdKey            = mkPreludeMiscIdUnique 69
1527eqIntegerIdKey                = mkPreludeMiscIdUnique 70
1528neqIntegerIdKey               = mkPreludeMiscIdUnique 71
1529absIntegerIdKey               = mkPreludeMiscIdUnique 72
1530signumIntegerIdKey            = mkPreludeMiscIdUnique 73
1531leIntegerIdKey                = mkPreludeMiscIdUnique 74
1532gtIntegerIdKey                = mkPreludeMiscIdUnique 75
1533ltIntegerIdKey                = mkPreludeMiscIdUnique 76
1534geIntegerIdKey                = mkPreludeMiscIdUnique 77
1535compareIntegerIdKey           = mkPreludeMiscIdUnique 78
1536quotRemIntegerIdKey           = mkPreludeMiscIdUnique 79
1537divModIntegerIdKey            = mkPreludeMiscIdUnique 80
1538quotIntegerIdKey              = mkPreludeMiscIdUnique 81
1539remIntegerIdKey               = mkPreludeMiscIdUnique 82
1540floatFromIntegerIdKey         = mkPreludeMiscIdUnique 83
1541doubleFromIntegerIdKey        = mkPreludeMiscIdUnique 84
1542encodeFloatIntegerIdKey       = mkPreludeMiscIdUnique 85
1543encodeDoubleIntegerIdKey      = mkPreludeMiscIdUnique 86
1544gcdIntegerIdKey               = mkPreludeMiscIdUnique 87
1545lcmIntegerIdKey               = mkPreludeMiscIdUnique 88
1546andIntegerIdKey               = mkPreludeMiscIdUnique 89
1547orIntegerIdKey                = mkPreludeMiscIdUnique 90
1548xorIntegerIdKey               = mkPreludeMiscIdUnique 91
1549complementIntegerIdKey        = mkPreludeMiscIdUnique 92
1550shiftLIntegerIdKey            = mkPreludeMiscIdUnique 93
1551shiftRIntegerIdKey            = mkPreludeMiscIdUnique 94
1552
1553rootMainKey, runMainKey :: Unique
1554rootMainKey                   = mkPreludeMiscIdUnique 100
1555runMainKey                    = mkPreludeMiscIdUnique 101
1556
1557thenIOIdKey, lazyIdKey, assertErrorIdKey :: Unique
1558thenIOIdKey                   = mkPreludeMiscIdUnique 102
1559lazyIdKey                     = mkPreludeMiscIdUnique 103
1560assertErrorIdKey              = mkPreludeMiscIdUnique 104
1561
1562breakpointIdKey, breakpointCondIdKey, breakpointAutoIdKey,
1563    breakpointJumpIdKey, breakpointCondJumpIdKey,
1564    breakpointAutoJumpIdKey :: Unique
1565breakpointIdKey               = mkPreludeMiscIdUnique 110
1566breakpointCondIdKey           = mkPreludeMiscIdUnique 111
1567breakpointAutoIdKey           = mkPreludeMiscIdUnique 112
1568breakpointJumpIdKey           = mkPreludeMiscIdUnique 113
1569breakpointCondJumpIdKey       = mkPreludeMiscIdUnique 114
1570breakpointAutoJumpIdKey       = mkPreludeMiscIdUnique 115
1571
1572inlineIdKey :: Unique
1573inlineIdKey                   = mkPreludeMiscIdUnique 120
1574
1575mapIdKey, groupWithIdKey, dollarIdKey :: Unique
1576mapIdKey              = mkPreludeMiscIdUnique 121
1577groupWithIdKey        = mkPreludeMiscIdUnique 122
1578dollarIdKey           = mkPreludeMiscIdUnique 123
1579
1580coercionTokenIdKey :: Unique
1581coercionTokenIdKey    = mkPreludeMiscIdUnique 124
1582
1583-- dotnet interop
1584unmarshalObjectIdKey, marshalObjectIdKey, marshalStringIdKey,
1585    unmarshalStringIdKey, checkDotnetResNameIdKey :: Unique
1586unmarshalObjectIdKey          = mkPreludeMiscIdUnique 150
1587marshalObjectIdKey            = mkPreludeMiscIdUnique 151
1588marshalStringIdKey            = mkPreludeMiscIdUnique 152
1589unmarshalStringIdKey          = mkPreludeMiscIdUnique 153
1590checkDotnetResNameIdKey       = mkPreludeMiscIdUnique 154
1591
1592undefinedKey :: Unique
1593undefinedKey                  = mkPreludeMiscIdUnique 155
1594
1595\end{code}
1596
1597Certain class operations from Prelude classes.  They get their own
1598uniques so we can look them up easily when we want to conjure them up
1599during type checking.
1600
1601\begin{code}
1602        -- Just a place holder for  unbound variables  produced by the renamer:
1603unboundKey :: Unique
1604unboundKey                    = mkPreludeMiscIdUnique 160
1605
1606fromIntegerClassOpKey, minusClassOpKey, fromRationalClassOpKey,
1607    enumFromClassOpKey, enumFromThenClassOpKey, enumFromToClassOpKey,
1608    enumFromThenToClassOpKey, eqClassOpKey, geClassOpKey, negateClassOpKey,
1609    failMClassOpKey, bindMClassOpKey, thenMClassOpKey, returnMClassOpKey,
1610    fmapClassOpKey
1611    :: Unique
1612fromIntegerClassOpKey         = mkPreludeMiscIdUnique 160
1613minusClassOpKey               = mkPreludeMiscIdUnique 161
1614fromRationalClassOpKey        = mkPreludeMiscIdUnique 162
1615enumFromClassOpKey            = mkPreludeMiscIdUnique 163
1616enumFromThenClassOpKey        = mkPreludeMiscIdUnique 164
1617enumFromToClassOpKey          = mkPreludeMiscIdUnique 165
1618enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 166
1619eqClassOpKey                  = mkPreludeMiscIdUnique 167
1620geClassOpKey                  = mkPreludeMiscIdUnique 168
1621negateClassOpKey              = mkPreludeMiscIdUnique 169
1622failMClassOpKey               = mkPreludeMiscIdUnique 170
1623bindMClassOpKey               = mkPreludeMiscIdUnique 171 -- (>>=)
1624thenMClassOpKey               = mkPreludeMiscIdUnique 172 -- (>>)
1625fmapClassOpKey                = mkPreludeMiscIdUnique 173
1626returnMClassOpKey             = mkPreludeMiscIdUnique 174
1627
1628-- Recursive do notation
1629mfixIdKey :: Unique
1630mfixIdKey       = mkPreludeMiscIdUnique 175
1631
1632-- Arrow notation
1633arrAIdKey, composeAIdKey, firstAIdKey, appAIdKey, choiceAIdKey,
1634    loopAIdKey :: Unique
1635arrAIdKey       = mkPreludeMiscIdUnique 180
1636composeAIdKey   = mkPreludeMiscIdUnique 181 -- >>>
1637firstAIdKey     = mkPreludeMiscIdUnique 182
1638appAIdKey       = mkPreludeMiscIdUnique 183
1639choiceAIdKey    = mkPreludeMiscIdUnique 184 --  |||
1640loopAIdKey      = mkPreludeMiscIdUnique 185
1641
1642fromStringClassOpKey :: Unique
1643fromStringClassOpKey          = mkPreludeMiscIdUnique 186
1644
1645-- Annotation type checking
1646toAnnotationWrapperIdKey :: Unique
1647toAnnotationWrapperIdKey      = mkPreludeMiscIdUnique 187
1648
1649-- Conversion functions
1650fromIntegralIdKey, realToFracIdKey, toIntegerClassOpKey, toRationalClassOpKey :: Unique
1651fromIntegralIdKey    = mkPreludeMiscIdUnique 190
1652realToFracIdKey      = mkPreludeMiscIdUnique 191
1653toIntegerClassOpKey  = mkPreludeMiscIdUnique 192
1654toRationalClassOpKey = mkPreludeMiscIdUnique 193
1655
1656-- Monad comprehensions
1657guardMIdKey, liftMIdKey, mzipIdKey :: Unique
1658guardMIdKey     = mkPreludeMiscIdUnique 194
1659liftMIdKey      = mkPreludeMiscIdUnique 195
1660mzipIdKey       = mkPreludeMiscIdUnique 196
1661
1662-- GHCi
1663ghciStepIoMClassOpKey :: Unique
1664ghciStepIoMClassOpKey = mkPreludeMiscIdUnique 197
1665
1666
1667---------------- Template Haskell -------------------
1668--      USES IdUniques 200-499
1669-----------------------------------------------------
1670\end{code}
1671
1672%************************************************************************
1673%*                                                                      *
1674\subsection[Class-std-groups]{Standard groups of Prelude classes}
1675%*                                                                      *
1676%************************************************************************
1677
1678NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1679even though every numeric class has these two as a superclass,
1680because the list of ambiguous dictionaries hasn't been simplified.
1681
1682\begin{code}
1683numericClassKeys :: [Unique]
1684numericClassKeys =
1685        [ numClassKey
1686        , realClassKey
1687        , integralClassKey
1688        ]
1689        ++ fractionalClassKeys
1690
1691fractionalClassKeys :: [Unique]
1692fractionalClassKeys =
1693        [ fractionalClassKey
1694        , floatingClassKey
1695        , realFracClassKey
1696        , realFloatClassKey
1697        ]
1698
1699-- The "standard classes" are used in defaulting (Haskell 98 report 4.3.4),
1700-- and are: "classes defined in the Prelude or a standard library"
1701standardClassKeys :: [Unique]
1702standardClassKeys = derivableClassKeys ++ numericClassKeys
1703                  ++ [randomClassKey, randomGenClassKey,
1704                      functorClassKey,
1705                      monadClassKey, monadPlusClassKey,
1706                      isStringClassKey,
1707                      applicativeClassKey, foldableClassKey, traversableClassKey
1708                     ]
1709\end{code}
1710
1711@derivableClassKeys@ is also used in checking \tr{deriving} constructs
1712(@TcDeriv@).
1713
1714\begin{code}
1715derivableClassKeys :: [Unique]
1716derivableClassKeys
1717  = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1718      boundedClassKey, showClassKey, readClassKey ]
1719\end{code}
Note: See TracBrowser for help on using the browser.