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