[project @ 2002-09-27 08:20:43 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[PrelNames]{Definitions of prelude modules and names}
5
6
7 -- MetaHaskell Extension
8 to do -- three things
9 1) Allocate a key
10 2) Make a "Name"
11 3) Add the name to knownKeyNames
12
13
14 The strings identify built-in prelude modules.  They are
15 defined here so as to avod 
16
17 * ModuleNames for prelude modules, 
18         e.g.    pREL_BASE_Name :: ModuleName
19
20 * Modules for prelude modules
21         e.g.    pREL_Base :: Module
22
23 * Uniques for Ids, DataCons, TyCons and Classes that the compiler 
24   "knows about" in some way
25         e.g.    intTyConKey :: Unique
26                 minusClassOpKey :: Unique
27
28 * Names for Ids, DataCons, TyCons and Classes that the compiler 
29   "knows about" in some way
30         e.g.    intTyConName :: Name
31                 minusName    :: Name
32   One of these Names contains
33         (a) the module and occurrence name of the thing
34         (b) its Unique
35   The may way the compiler "knows about" one of these things is
36   where the type checker or desugarer needs to look it up. For
37   example, when desugaring list comprehensions the desugarer
38   needs to conjure up 'foldr'.  It does this by looking up
39   foldrName in the environment.
40
41 * RdrNames for Ids, DataCons etc that the compiler may emit into
42   generated code (e.g. for deriving).  It's not necessary to know
43   the uniques for these guys, only their names
44
45
46 \begin{code}
47 module PrelNames (
48         Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
49
50         -----------------------------------------------------------
51         module PrelNames,       -- A huge bunch of (a) Names,  e.g. intTyConName
52                                 --                 (b) Uniques e.g. intTyConKey
53                                 -- So many that we export them all
54
55         -----------------------------------------------------------
56         knownKeyNames, templateHaskellNames,
57         mkTupNameStr, isBuiltInSyntaxName,
58
59         ------------------------------------------------------------
60         -- Goups of classes and types
61         needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
62         fractionalClassKeys, numericClassKeys, standardClassKeys,
63         derivableClassKeys,     -- things are needed as a result of a 
64                                 -- deriving(C) clause
65         numericTyKeys, cCallishTyKeys,
66
67         mkUnboundName, isUnboundName
68     ) where
69
70 #include "HsVersions.h"
71
72 import Module     ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName,mkVanillaModule )
73 import OccName    ( UserFS, dataName, tcName, clsName, 
74                     mkKindOccFS, mkOccFS
75                   )
76
77 -- to avoid clashes with Meta.var we must make a local alias for OccName.varName
78 -- we do this by removing varName from the import of OccName above, making
79 -- a qualified instance of OccName and using OccNameAlias.varName where varName
80 -- ws previously used in this file.
81 import qualified OccName as OccNameAlias 
82
83                   
84 import RdrName    ( RdrName, nameRdrName, mkOrig, rdrNameOcc )
85 import Unique     ( Unique, Uniquable(..), hasKey,
86                     mkPreludeMiscIdUnique, mkPreludeDataConUnique,
87                     mkPreludeTyConUnique, mkPreludeClassUnique,
88                     mkTupleTyConUnique, isTupleKey
89                   ) 
90 import BasicTypes ( Boxity(..) )
91 import Name       ( Name, mkInternalName, mkKnownKeyExternalName, mkWiredInName, nameUnique )
92 import NameSet    ( NameSet, mkNameSet )
93 import SrcLoc     ( noSrcLoc )
94 import Util       ( nOfThem )
95 import Panic      ( panic )
96 import FastString
97
98
99 \end{code}
100
101
102 %************************************************************************
103 %*                                                                      *
104 \subsection{Local Names}
105 %*                                                                      *
106 %************************************************************************
107
108 This *local* name is used by the interactive stuff
109
110 \begin{code}
111 itName uniq = mkInternalName uniq (mkOccFS OccNameAlias.varName FSLIT("it")) noSrcLoc
112 \end{code}
113
114 \begin{code}
115 -- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
116 -- during compiler debugging.
117 mkUnboundName :: RdrName -> Name
118 mkUnboundName rdr_name = mkInternalName unboundKey (rdrNameOcc rdr_name) noSrcLoc
119
120 isUnboundName :: Name -> Bool
121 isUnboundName name = name `hasKey` unboundKey
122 \end{code}
123
124
125 %************************************************************************
126 %*                                                                      *
127 \subsection{Built-in-syntax names
128 %*                                                                      *
129 %************************************************************************
130
131 Built-in syntax names are parsed directly into Exact RdrNames.
132 This predicate just identifies them. 
133
134 \begin{code}
135 isBuiltInSyntaxName :: Name -> Bool
136 isBuiltInSyntaxName n
137   =  isTupleKey uniq
138   || uniq `elem` [listTyConKey, nilDataConKey, consDataConKey,
139                   funTyConKey, parrTyConKey]
140   where
141      uniq = nameUnique n
142 \end{code}
143
144 %************************************************************************
145 %*                                                                      *
146 \subsection{Known key Names}
147 %*                                                                      *
148 %************************************************************************
149
150 This section tells what the compiler knows about the assocation of
151 names with uniques.  These ones are the *non* wired-in ones.  The
152 wired in ones are defined in TysWiredIn etc.
153
154
155 MetaHaskell Extension
156 It is here that the names defiend in module Meta must be added
157 \begin{code}
158 knownKeyNames :: [Name]
159 knownKeyNames
160  =  [   -- Type constructors (synonyms especially)
161         ioTyConName, ioDataConName,
162         runIOName,
163         orderingTyConName,
164         rationalTyConName,
165         ratioDataConName,
166         ratioTyConName,
167         byteArrayTyConName,
168         mutableByteArrayTyConName,
169         bcoPrimTyConName,
170         stablePtrTyConName,
171         stablePtrDataConName,
172
173         --  Classes.  *Must* include:
174         --      classes that are grabbed by key (e.g., eqClassKey)
175         --      classes in "Class.standardClassKeys" (quite a few)
176         eqClassName,                    -- mentioned, derivable
177         ordClassName,                   -- derivable
178         boundedClassName,               -- derivable
179         numClassName,                   -- mentioned, numeric
180         enumClassName,                  -- derivable
181         monadClassName,
182         functorClassName,
183         realClassName,                  -- numeric
184         integralClassName,              -- numeric
185         fractionalClassName,            -- numeric
186         floatingClassName,              -- numeric
187         realFracClassName,              -- numeric
188         realFloatClassName,             -- numeric
189         cCallableClassName,             -- mentioned, ccallish
190         cReturnableClassName,           -- mentioned, ccallish
191
192         -- Numeric stuff
193         negateName, minusName, 
194         fromRationalName, fromIntegerName, 
195         geName, eqName, 
196         
197         -- Enum stuff
198         enumFromName, enumFromThenName, 
199         enumFromThenToName, enumFromToName,
200         enumFromToPName, enumFromThenToPName,
201
202         -- Monad stuff
203         thenMName, bindMName, returnMName, failMName,
204         thenIOName, bindIOName, returnIOName, failIOName,
205
206         -- MonadRec stuff
207         mfixName,
208
209         -- Ix stuff
210         ixClassName, 
211
212         -- Show stuff
213         showClassName, 
214
215         -- Read stuff
216         readClassName, 
217         
218         -- Stable pointers
219         newStablePtrName,
220
221         -- Strings and lists
222         unpackCStringName, unpackCStringAppendName,
223         unpackCStringFoldrName, unpackCStringUtf8Name,
224
225         -- List operations
226         concatName, filterName,
227         zipName, foldrName, buildName, augmentName, appendName,
228
229         -- Parallel array operations
230         nullPName, lengthPName, replicatePName, mapPName,
231         filterPName, zipPName, crossPName, indexPName,
232         toPName, bpermutePName, bpermuteDftPName, indexOfPName,
233
234         -- MetaHaskell Extension, "the smart constructors" 
235         -- text1 from Meta/work/gen.hs
236         intLName,
237         charLName,
238         plitName,
239         pvarName,
240         ptupName,
241         pconName,
242         ptildeName,
243         paspatName,
244         pwildName,
245         varName,
246         conName,
247         litName,
248         appName,
249         infixEName,        
250         lamName,
251         tupName,
252         doEName,
253         compName,
254         listExpName,
255         condName,
256         letEName,
257         caseEName,
258         infixAppName,
259         sectionLName,
260         sectionRName,        
261         guardedName,
262         normalName,
263         bindStName,
264         letStName,
265         noBindStName,
266         parStName,
267         fromName,
268         fromThenName,
269         fromToName,
270         fromThenToName,
271         liftName,
272         gensymName,
273         returnQName,
274         bindQName,   
275         funName,
276         valName,
277         protoName, matchName, clauseName,
278         exprTyConName, declTyConName, pattTyConName, mtchTyConName, clseTyConName,
279         qTyConName, expTyConName, matTyConName, clsTyConName,
280         
281         -- FFI primitive types that are not wired-in.
282         int8TyConName, int16TyConName, int32TyConName, int64TyConName,
283         word8TyConName, word16TyConName, word32TyConName, word64TyConName,
284
285         -- Others
286         unsafeCoerceName, otherwiseIdName, 
287         plusIntegerName, timesIntegerName,
288         eqStringName, assertName, assertErrorName, runSTRepName,
289         printName, splitName, fstName, sndName,
290         errorName,
291
292         -- Booleans
293         andName, orName
294     ]
295
296 monadNames :: [Name]    -- The monad ops need by a HsDo
297 monadNames = [returnMName, failMName, bindMName, thenMName]
298 \end{code}
299
300
301 %************************************************************************
302 %*                                                                      *
303 \subsection{Module names}
304 %*                                                                      *
305 %************************************************************************
306
307
308 --MetaHaskell Extension Add a new module here
309 \begin{code}
310 pRELUDE_Name      = mkModuleName "Prelude"
311 gHC_PRIM_Name     = mkModuleName "GHC.Prim"        -- Primitive types and values
312 pREL_BASE_Name    = mkModuleName "GHC.Base"
313 pREL_ENUM_Name    = mkModuleName "GHC.Enum"
314 pREL_SHOW_Name    = mkModuleName "GHC.Show"
315 pREL_READ_Name    = mkModuleName "GHC.Read"
316 pREL_NUM_Name     = mkModuleName "GHC.Num"
317 pREL_LIST_Name    = mkModuleName "GHC.List"
318 pREL_PARR_Name    = mkModuleName "GHC.PArr"
319 pREL_TUP_Name     = mkModuleName "Data.Tuple"
320 pREL_PACK_Name    = mkModuleName "GHC.Pack"
321 pREL_CONC_Name    = mkModuleName "GHC.Conc"
322 pREL_IO_BASE_Name = mkModuleName "GHC.IOBase"
323 pREL_ST_Name      = mkModuleName "GHC.ST"
324 pREL_ARR_Name     = mkModuleName "GHC.Arr"
325 pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
326 pREL_STABLE_Name  = mkModuleName "GHC.Stable"
327 pREL_ADDR_Name    = mkModuleName "GHC.Addr"
328 pREL_PTR_Name     = mkModuleName "GHC.Ptr"
329 pREL_ERR_Name     = mkModuleName "GHC.Err"
330 pREL_REAL_Name    = mkModuleName "GHC.Real"
331 pREL_FLOAT_Name   = mkModuleName "GHC.Float"
332 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
333 sYSTEM_IO_Name    = mkModuleName "System.IO"
334
335 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
336 lEX_Name       = mkModuleName "Text.Read.Lex"
337
338 mAIN_Name         = mkModuleName "Main"
339 pREL_INT_Name     = mkModuleName "GHC.Int"
340 pREL_WORD_Name    = mkModuleName "GHC.Word"
341 mONAD_FIX_Name    = mkModuleName "Control.Monad.Fix"
342 aDDR_Name         = mkModuleName "Addr"
343
344 gLA_EXTS_Name   = mkModuleName "GHC.Exts"
345
346 gHC_PRIM        = mkPrelModule gHC_PRIM_Name
347 pREL_BASE       = mkPrelModule pREL_BASE_Name
348 pREL_ADDR       = mkPrelModule pREL_ADDR_Name
349 pREL_PTR        = mkPrelModule pREL_PTR_Name
350 pREL_STABLE     = mkPrelModule pREL_STABLE_Name
351 pREL_IO_BASE    = mkPrelModule pREL_IO_BASE_Name
352 pREL_PACK       = mkPrelModule pREL_PACK_Name
353 pREL_ERR        = mkPrelModule pREL_ERR_Name
354 pREL_NUM        = mkPrelModule pREL_NUM_Name
355 pREL_REAL       = mkPrelModule pREL_REAL_Name
356 pREL_FLOAT      = mkPrelModule pREL_FLOAT_Name
357 pRELUDE         = mkPrelModule pRELUDE_Name
358
359
360 iNTERACTIVE     = mkHomeModule (mkModuleName "$Interactive")
361
362 -- MetaHaskell Extension  text2 from Meta/work/gen.hs
363 mETA_META_Name   = mkModuleName "Language.Haskell.THSyntax"
364
365 \end{code}
366
367 %************************************************************************
368 %*                                                                      *
369 \subsection{Constructing the names of tuples
370 %*                                                                      *
371 %************************************************************************
372
373 \begin{code}
374 mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
375
376 mkTupNameStr Boxed 0 = (pREL_BASE_Name, FSLIT("()"))
377 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
378 mkTupNameStr Boxed 2 = (pREL_TUP_Name, mkFastString "(,)")   -- not strictly necessary
379 mkTupNameStr Boxed 3 = (pREL_TUP_Name, mkFastString "(,,)")  -- ditto
380 mkTupNameStr Boxed 4 = (pREL_TUP_Name, mkFastString "(,,,)") -- ditto
381 mkTupNameStr Boxed n = (pREL_TUP_Name, mkFastString ("(" ++ nOfThem (n-1) ',' ++ ")"))
382
383 mkTupNameStr Unboxed 0 = panic "Name.mkUbxTupNameStr: 0 ???"
384 mkTupNameStr Unboxed 1 = (gHC_PRIM_Name, mkFastString "(# #)") -- 1 and 0 both make sense!!!
385 mkTupNameStr Unboxed 2 = (gHC_PRIM_Name, mkFastString "(#,#)")
386 mkTupNameStr Unboxed 3 = (gHC_PRIM_Name, mkFastString "(#,,#)")
387 mkTupNameStr Unboxed 4 = (gHC_PRIM_Name, mkFastString "(#,,,#)")
388 mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ nOfThem (n-1) ',' ++ "#)"))
389 \end{code}
390
391
392 %************************************************************************
393 %*                                                                      *
394                         RdrNames
395 %*                                                                      *
396 %************************************************************************
397
398 \begin{code}
399 getTag_RDR              = nameRdrName getTagName
400
401 eq_RDR                  = nameRdrName eqName
402 ge_RDR                  = nameRdrName geName
403 ne_RDR                  = varQual_RDR  pREL_BASE_Name FSLIT("/=")
404 le_RDR                  = varQual_RDR  pREL_BASE_Name FSLIT("<=") 
405 gt_RDR                  = varQual_RDR  pREL_BASE_Name FSLIT(">")  
406 compare_RDR             = varQual_RDR  pREL_BASE_Name FSLIT("compare") 
407 ltTag_RDR               = dataQual_RDR pREL_BASE_Name FSLIT("LT") 
408 eqTag_RDR               = dataQual_RDR pREL_BASE_Name FSLIT("EQ")
409 gtTag_RDR               = dataQual_RDR pREL_BASE_Name FSLIT("GT")
410
411 eqClass_RDR             = nameRdrName eqClassName
412 numClass_RDR            = nameRdrName numClassName
413 ordClass_RDR            = nameRdrName ordClassName
414 enumClass_RDR           = nameRdrName enumClassName
415 monadClass_RDR          = nameRdrName monadClassName
416 cCallableClass_RDR      = nameRdrName cCallableClassName
417 cReturnableClass_RDR    = nameRdrName cReturnableClassName
418
419 map_RDR                 = varQual_RDR pREL_BASE_Name FSLIT("map")
420 append_RDR              = varQual_RDR pREL_BASE_Name FSLIT("++")
421
422 foldr_RDR               = nameRdrName foldrName
423 build_RDR               = nameRdrName buildName
424 returnM_RDR             = nameRdrName returnMName
425 bindM_RDR               = nameRdrName bindMName
426 failM_RDR               = nameRdrName failMName
427
428 false_RDR               = nameRdrName falseDataConName
429 true_RDR                = nameRdrName trueDataConName
430 and_RDR                 = nameRdrName andName
431
432 error_RDR               = nameRdrName errorName
433
434 fromEnum_RDR            = varQual_RDR pREL_ENUM_Name FSLIT("fromEnum")
435 toEnum_RDR              = varQual_RDR pREL_ENUM_Name FSLIT("toEnum")
436 mkInt_RDR               = nameRdrName intDataConName
437
438 enumFrom_RDR            = nameRdrName enumFromName
439 enumFromTo_RDR          = nameRdrName enumFromToName
440 enumFromThen_RDR        = nameRdrName enumFromThenName
441 enumFromThenTo_RDR      = nameRdrName enumFromThenToName
442
443 ratioDataCon_RDR        = nameRdrName ratioDataConName
444 plusInteger_RDR         = nameRdrName plusIntegerName
445 timesInteger_RDR        = nameRdrName timesIntegerName
446
447 ioDataCon_RDR           = nameRdrName ioDataConName
448
449 eqString_RDR            = nameRdrName eqStringName
450 unpackCString_RDR       = nameRdrName unpackCStringName
451 unpackCStringFoldr_RDR  = nameRdrName unpackCStringFoldrName
452 unpackCStringUtf8_RDR   = nameRdrName unpackCStringUtf8Name
453
454 newStablePtr_RDR        = nameRdrName newStablePtrName
455
456 bindIO_RDR              = nameRdrName bindIOName
457 returnIO_RDR            = nameRdrName returnIOName
458
459 fromInteger_RDR         = nameRdrName fromIntegerName
460 fromRational_RDR        = nameRdrName fromRationalName
461 minus_RDR               = nameRdrName minusName
462 times_RDR               = varQual_RDR  pREL_NUM_Name FSLIT("*")
463 plus_RDR                = varQual_RDR pREL_NUM_Name FSLIT("+")
464
465 compose_RDR             = varQual_RDR pREL_BASE_Name FSLIT(".")
466
467 not_RDR                 = varQual_RDR pREL_BASE_Name FSLIT("not")
468 succ_RDR                = varQual_RDR pREL_ENUM_Name FSLIT("succ")
469 pred_RDR                = varQual_RDR pREL_ENUM_Name FSLIT("pred")
470 minBound_RDR            = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
471 maxBound_RDR            = varQual_RDR pREL_ENUM_Name FSLIT("maxBound")
472 range_RDR               = varQual_RDR pREL_ARR_Name FSLIT("range")
473 inRange_RDR             = varQual_RDR pREL_ARR_Name FSLIT("inRange")
474 index_RDR               = varQual_RDR pREL_ARR_Name FSLIT("index")
475
476 readList_RDR            = varQual_RDR pREL_READ_Name FSLIT("readList")
477 readListDefault_RDR     = varQual_RDR pREL_READ_Name FSLIT("readListDefault")
478 readListPrec_RDR        = varQual_RDR pREL_READ_Name FSLIT("readListPrec")
479 readListPrecDefault_RDR = varQual_RDR pREL_READ_Name FSLIT("readListPrecDefault")
480 readPrec_RDR            = varQual_RDR pREL_READ_Name FSLIT("readPrec")
481 parens_RDR              = varQual_RDR pREL_READ_Name FSLIT("parens")
482 choose_RDR              = varQual_RDR pREL_READ_Name FSLIT("choose")
483 lexP_RDR                = varQual_RDR pREL_READ_Name FSLIT("lexP")
484
485 punc_RDR                = dataQual_RDR lEX_Name FSLIT("Punc")
486 ident_RDR               = dataQual_RDR lEX_Name FSLIT("Ident")
487 symbol_RDR              = dataQual_RDR lEX_Name FSLIT("Symbol")
488
489 step_RDR                = varQual_RDR  rEAD_PREC_Name FSLIT("step")
490 alt_RDR                 = varQual_RDR  rEAD_PREC_Name FSLIT("+++") 
491 reset_RDR               = varQual_RDR  rEAD_PREC_Name FSLIT("reset")
492 prec_RDR                = varQual_RDR  rEAD_PREC_Name FSLIT("prec")
493
494 showList_RDR            = varQual_RDR pREL_SHOW_Name FSLIT("showList")
495 showList___RDR          = varQual_RDR pREL_SHOW_Name FSLIT("showList__")
496 showsPrec_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec") 
497 showString_RDR          = varQual_RDR pREL_SHOW_Name FSLIT("showString")
498 showSpace_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showSpace") 
499 showParen_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showParen") 
500 \end{code}
501
502
503 %************************************************************************
504 %*                                                                      *
505 \subsection{Known-key names}
506 %*                                                                      *
507 %************************************************************************
508
509 Many of these Names are not really "built in", but some parts of the
510 compiler (notably the deriving mechanism) need to mention their names,
511 and it's convenient to write them all down in one place.
512
513 --MetaHaskell Extension  add the constrs and the lower case case
514 -- guys as well (perhaps) e.g. see  trueDataConName     below
515
516
517 \begin{code}
518 dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
519 runIOName      = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey
520
521 -- Stuff from GHC.Prim
522 usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
523 usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
524 superKindName    = kindQual FSLIT("KX") kindConKey
525 superBoxityName  = kindQual FSLIT("BX") boxityConKey
526 liftedConName    = kindQual FSLIT("*") liftedConKey
527 unliftedConName  = kindQual FSLIT("#") unliftedConKey
528 openKindConName  = kindQual FSLIT("?") anyBoxConKey
529 usageKindConName = kindQual FSLIT("$") usageConKey
530 typeConName      = kindQual FSLIT("Type") typeConKey
531
532 funTyConName                  = tcQual  gHC_PRIM_Name FSLIT("(->)")  funTyConKey
533 charPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Char#") charPrimTyConKey 
534 intPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("Int#") intPrimTyConKey 
535 int32PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int32#") int32PrimTyConKey 
536 int64PrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Int64#") int64PrimTyConKey 
537 wordPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Word#") wordPrimTyConKey 
538 word32PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word32#") word32PrimTyConKey 
539 word64PrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Word64#") word64PrimTyConKey 
540 addrPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Addr#") addrPrimTyConKey 
541 floatPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Float#") floatPrimTyConKey 
542 doublePrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("Double#") doublePrimTyConKey 
543 statePrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("State#") statePrimTyConKey 
544 realWorldTyConName            = tcQual  gHC_PRIM_Name FSLIT("RealWorld") realWorldTyConKey 
545 arrayPrimTyConName            = tcQual  gHC_PRIM_Name FSLIT("Array#") arrayPrimTyConKey 
546 byteArrayPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("ByteArray#") byteArrayPrimTyConKey 
547 mutableArrayPrimTyConName     = tcQual  gHC_PRIM_Name FSLIT("MutableArray#") mutableArrayPrimTyConKey 
548 mutableByteArrayPrimTyConName = tcQual  gHC_PRIM_Name FSLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
549 mutVarPrimTyConName           = tcQual  gHC_PRIM_Name FSLIT("MutVar#") mutVarPrimTyConKey 
550 mVarPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("MVar#") mVarPrimTyConKey 
551 stablePtrPrimTyConName        = tcQual  gHC_PRIM_Name FSLIT("StablePtr#") stablePtrPrimTyConKey 
552 stableNamePrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("StableName#") stableNamePrimTyConKey 
553 foreignObjPrimTyConName       = tcQual  gHC_PRIM_Name FSLIT("ForeignObj#") foreignObjPrimTyConKey 
554 bcoPrimTyConName              = tcQual  gHC_PRIM_Name FSLIT("BCO#") bcoPrimTyConKey 
555 weakPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("Weak#") weakPrimTyConKey 
556 threadIdPrimTyConName         = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadIdPrimTyConKey 
557 cCallableClassName            = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
558 cReturnableClassName          = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
559
560 getTagName       = wVarQual gHC_PRIM_Name FSLIT("getTag#")      getTagIdKey
561 unsafeCoerceName = wVarQual gHC_PRIM_Name FSLIT("unsafeCoerce#") unsafeCoerceIdKey 
562 nullAddrName     = wVarQual gHC_PRIM_Name FSLIT("nullAddr#")    nullAddrIdKey
563 seqName          = wVarQual gHC_PRIM_Name FSLIT("seq")          seqIdKey
564 realWorldName    = wVarQual gHC_PRIM_Name FSLIT("realWorld#")   realWorldPrimIdKey
565
566 -- PrelBase data types and constructors
567 charTyConName     = wTcQual   pREL_BASE_Name FSLIT("Char") charTyConKey
568 charDataConName   = wDataQual pREL_BASE_Name FSLIT("C#") charDataConKey
569 intTyConName      = wTcQual   pREL_BASE_Name FSLIT("Int") intTyConKey
570 intDataConName    = wDataQual pREL_BASE_Name FSLIT("I#") intDataConKey
571 orderingTyConName = tcQual   pREL_BASE_Name FSLIT("Ordering") orderingTyConKey
572 boolTyConName     = wTcQual   pREL_BASE_Name FSLIT("Bool") boolTyConKey
573 falseDataConName  = wDataQual pREL_BASE_Name FSLIT("False") falseDataConKey
574 trueDataConName   = wDataQual pREL_BASE_Name FSLIT("True") trueDataConKey
575 listTyConName     = wTcQual   pREL_BASE_Name FSLIT("[]") listTyConKey
576 nilDataConName    = wDataQual pREL_BASE_Name FSLIT("[]") nilDataConKey
577 consDataConName   = wDataQual pREL_BASE_Name FSLIT(":") consDataConKey
578 eqName            = varQual  pREL_BASE_Name FSLIT("==") eqClassOpKey
579 geName            = varQual  pREL_BASE_Name FSLIT(">=") geClassOpKey
580
581 -- Generics
582 crossTyConName     = tcQual   pREL_BASE_Name FSLIT(":*:") crossTyConKey
583 crossDataConName   = dataQual pREL_BASE_Name FSLIT(":*:") crossDataConKey
584 plusTyConName      = wTcQual   pREL_BASE_Name FSLIT(":+:") plusTyConKey
585 inlDataConName     = wDataQual pREL_BASE_Name FSLIT("Inl") inlDataConKey
586 inrDataConName     = wDataQual pREL_BASE_Name FSLIT("Inr") inrDataConKey
587 genUnitTyConName   = wTcQual   pREL_BASE_Name FSLIT("Unit") genUnitTyConKey
588 genUnitDataConName = wDataQual pREL_BASE_Name FSLIT("Unit") genUnitDataConKey
589
590 -- Base strings Strings
591 unpackCStringName       = varQual pREL_BASE_Name FSLIT("unpackCString#") unpackCStringIdKey
592 unpackCStringAppendName = varQual pREL_BASE_Name FSLIT("unpackAppendCString#") unpackCStringAppendIdKey
593 unpackCStringFoldrName  = varQual pREL_BASE_Name FSLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
594 unpackCStringUtf8Name   = varQual pREL_BASE_Name FSLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
595 eqStringName            = varQual pREL_BASE_Name FSLIT("eqString")  eqStringIdKey
596
597 -- Base classes (Eq, Ord, Functor)
598 eqClassName       = clsQual pREL_BASE_Name FSLIT("Eq") eqClassKey
599 functorClassName  = clsQual pREL_BASE_Name FSLIT("Functor") functorClassKey
600 ordClassName      = clsQual pREL_BASE_Name FSLIT("Ord") ordClassKey
601
602 -- Class Monad
603 monadClassName     = clsQual pREL_BASE_Name FSLIT("Monad") monadClassKey
604 thenMName          = varQual pREL_BASE_Name FSLIT(">>")  thenMClassOpKey
605 bindMName          = varQual pREL_BASE_Name FSLIT(">>=") bindMClassOpKey
606 returnMName        = varQual pREL_BASE_Name FSLIT("return") returnMClassOpKey
607 failMName          = varQual pREL_BASE_Name FSLIT("fail") failMClassOpKey
608
609
610 -- Random PrelBase functions
611 otherwiseIdName   = varQual pREL_BASE_Name FSLIT("otherwise") otherwiseIdKey
612 foldrName         = varQual pREL_BASE_Name FSLIT("foldr")     foldrIdKey
613 buildName         = varQual pREL_BASE_Name FSLIT("build")     buildIdKey
614 augmentName       = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
615 appendName        = varQual pREL_BASE_Name FSLIT("++")        appendIdKey
616 andName           = varQual pREL_BASE_Name FSLIT("&&")        andIdKey
617 orName            = varQual pREL_BASE_Name FSLIT("||")        orIdKey
618 assertName        = varQual pREL_BASE_Name FSLIT("assert")    assertIdKey
619 lazyIdName        = wVarQual pREL_BASE_Name FSLIT("lazy")     lazyIdKey
620
621 -- PrelTup
622 fstName           = varQual pREL_TUP_Name FSLIT("fst") fstIdKey
623 sndName           = varQual pREL_TUP_Name FSLIT("snd") sndIdKey
624
625 -- Module PrelNum
626 numClassName      = clsQual pREL_NUM_Name FSLIT("Num") numClassKey
627 fromIntegerName   = varQual pREL_NUM_Name FSLIT("fromInteger") fromIntegerClassOpKey
628 minusName         = varQual pREL_NUM_Name FSLIT("-") minusClassOpKey
629 negateName        = varQual pREL_NUM_Name FSLIT("negate") negateClassOpKey
630 plusIntegerName   = varQual pREL_NUM_Name FSLIT("plusInteger") plusIntegerIdKey
631 timesIntegerName  = varQual pREL_NUM_Name FSLIT("timesInteger") timesIntegerIdKey
632 integerTyConName  = wTcQual  pREL_NUM_Name FSLIT("Integer") integerTyConKey
633 smallIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("S#") smallIntegerDataConKey
634 largeIntegerDataConName = wDataQual pREL_NUM_Name FSLIT("J#") largeIntegerDataConKey
635
636 -- PrelReal types and classes
637 rationalTyConName   = tcQual   pREL_REAL_Name  FSLIT("Rational") rationalTyConKey
638 ratioTyConName      = tcQual   pREL_REAL_Name  FSLIT("Ratio") ratioTyConKey
639 ratioDataConName    = dataQual pREL_REAL_Name  FSLIT(":%") ratioDataConKey
640 realClassName       = clsQual  pREL_REAL_Name  FSLIT("Real") realClassKey
641 integralClassName   = clsQual  pREL_REAL_Name  FSLIT("Integral") integralClassKey
642 realFracClassName   = clsQual  pREL_REAL_Name  FSLIT("RealFrac") realFracClassKey
643 fractionalClassName = clsQual  pREL_REAL_Name  FSLIT("Fractional") fractionalClassKey
644 fromRationalName    = varQual  pREL_REAL_Name  FSLIT("fromRational") fromRationalClassOpKey
645
646 -- PrelFloat classes
647 floatTyConName     = wTcQual   pREL_FLOAT_Name FSLIT("Float") floatTyConKey
648 floatDataConName   = wDataQual pREL_FLOAT_Name FSLIT("F#") floatDataConKey
649 doubleTyConName    = wTcQual   pREL_FLOAT_Name FSLIT("Double") doubleTyConKey
650 doubleDataConName  = wDataQual pREL_FLOAT_Name FSLIT("D#") doubleDataConKey
651 floatingClassName  = clsQual  pREL_FLOAT_Name FSLIT("Floating") floatingClassKey
652 realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassKey
653
654 -- Class Ix
655 ixClassName        = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
656
657 -- Enum module (Enum, Bounded)
658 enumClassName      = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
659 enumFromName       = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
660 enumFromToName     = varQual pREL_ENUM_Name FSLIT("enumFromTo") enumFromToClassOpKey
661 enumFromThenName   = varQual pREL_ENUM_Name FSLIT("enumFromThen") enumFromThenClassOpKey
662 enumFromThenToName = varQual pREL_ENUM_Name FSLIT("enumFromThenTo") enumFromThenToClassOpKey
663 boundedClassName  = clsQual pREL_ENUM_Name FSLIT("Bounded") boundedClassKey
664
665 -- List functions
666 concatName        = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
667 filterName        = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
668 zipName           = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
669
670 -- MetaHaskell Extension, "the smart constructors"
671 -- text3 from Meta/work/gen.hs
672 intLName       = varQual mETA_META_Name FSLIT("intL")          intLIdKey
673 charLName      = varQual mETA_META_Name FSLIT("charL")         charLIdKey
674 plitName       = varQual mETA_META_Name FSLIT("plit")          plitIdKey
675 pvarName       = varQual mETA_META_Name FSLIT("pvar")          pvarIdKey
676 ptupName       = varQual mETA_META_Name FSLIT("ptup")          ptupIdKey
677 pconName       = varQual mETA_META_Name FSLIT("pcon")          pconIdKey
678 ptildeName     = varQual mETA_META_Name FSLIT("ptilde")        ptildeIdKey
679 paspatName     = varQual mETA_META_Name FSLIT("paspat")        paspatIdKey
680 pwildName      = varQual mETA_META_Name FSLIT("pwild")         pwildIdKey
681 varName        = varQual mETA_META_Name FSLIT("var")           varIdKey
682 conName        = varQual mETA_META_Name FSLIT("con")           conIdKey
683 litName        = varQual mETA_META_Name FSLIT("lit")           litIdKey
684 appName        = varQual mETA_META_Name FSLIT("app")           appIdKey
685 infixEName     = varQual mETA_META_Name FSLIT("infixE")        infixEIdKey
686 lamName        = varQual mETA_META_Name FSLIT("lam")           lamIdKey
687 tupName        = varQual mETA_META_Name FSLIT("tup")           tupIdKey
688 doEName        = varQual mETA_META_Name FSLIT("doE")           doEIdKey
689 compName       = varQual mETA_META_Name FSLIT("comp")          compIdKey
690 listExpName    = varQual mETA_META_Name FSLIT("listExp")       listExpIdKey
691 condName       = varQual mETA_META_Name FSLIT("cond")          condIdKey
692 letEName       = varQual mETA_META_Name FSLIT("letE")          letEIdKey
693 caseEName      = varQual mETA_META_Name FSLIT("caseE")         caseEIdKey
694 infixAppName   = varQual mETA_META_Name FSLIT("infixApp")      infixAppIdKey
695 sectionLName   = varQual mETA_META_Name FSLIT("sectionL")      sectionLIdKey
696 sectionRName   = varQual mETA_META_Name FSLIT("sectionR")      sectionRIdKey
697 guardedName    = varQual mETA_META_Name FSLIT("guarded")       guardedIdKey
698 normalName     = varQual mETA_META_Name FSLIT("normal")        normalIdKey
699 bindStName     = varQual mETA_META_Name FSLIT("bindSt")        bindStIdKey
700 letStName      = varQual mETA_META_Name FSLIT("letSt")         letStIdKey
701 noBindStName   = varQual mETA_META_Name FSLIT("noBindSt")      noBindStIdKey
702 parStName      = varQual mETA_META_Name FSLIT("parSt")         parStIdKey
703 fromName       = varQual mETA_META_Name FSLIT("from")          fromIdKey
704 fromThenName   = varQual mETA_META_Name FSLIT("fromThen")      fromThenIdKey
705 fromToName     = varQual mETA_META_Name FSLIT("fromTo")        fromToIdKey
706 fromThenToName = varQual mETA_META_Name FSLIT("fromThenTo")    fromThenToIdKey
707 liftName       = varQual mETA_META_Name FSLIT("lift")          liftIdKey
708 gensymName     = varQual mETA_META_Name FSLIT("gensym")        gensymIdKey
709 returnQName    = varQual mETA_META_Name FSLIT("returnQ")       returnQIdKey
710 bindQName      = varQual mETA_META_Name FSLIT("bindQ")         bindQIdKey
711 funName        = varQual mETA_META_Name FSLIT("fun")           funIdKey
712 valName        = varQual mETA_META_Name FSLIT("val")           valIdKey
713 matchName      = varQual mETA_META_Name FSLIT("match")         matchIdKey
714 clauseName     = varQual mETA_META_Name FSLIT("clause")        clauseIdKey
715 protoName      = varQual mETA_META_Name FSLIT("proto")         protoIdKey
716 exprTyConName  = tcQual  mETA_META_Name FSLIT("Expr")          exprTyConKey
717 declTyConName  = tcQual  mETA_META_Name FSLIT("Decl")          declTyConKey
718 pattTyConName  = tcQual  mETA_META_Name FSLIT("Patt")          pattTyConKey
719 mtchTyConName  = tcQual  mETA_META_Name FSLIT("Mtch")          mtchTyConKey
720 clseTyConName  = tcQual  mETA_META_Name FSLIT("Clse")          clseTyConKey
721 stmtTyConName  = tcQual  mETA_META_Name FSLIT("Stmt")          stmtTyConKey
722
723 qTyConName     = tcQual  mETA_META_Name FSLIT("Q")             qTyConKey
724 expTyConName   = tcQual  mETA_META_Name FSLIT("Exp")           expTyConKey
725 matTyConName   = tcQual  mETA_META_Name FSLIT("Mat")           matTyConKey
726 clsTyConName   = tcQual  mETA_META_Name FSLIT("Cls")           clsTyConKey
727
728 -- Class Show
729 showClassName     = clsQual pREL_SHOW_Name FSLIT("Show")       showClassKey
730
731 -- Class Read
732 readClassName      = clsQual pREL_READ_Name FSLIT("Read") readClassKey
733
734 -- parallel array types and functions
735 enumFromToPName    = varQual pREL_PARR_Name FSLIT("enumFromToP") enumFromToPIdKey
736 enumFromThenToPName= varQual pREL_PARR_Name FSLIT("enumFromThenToP") enumFromThenToPIdKey
737 parrTyConName     = wTcQual  pREL_PARR_Name FSLIT("[::]")        parrTyConKey
738 parrDataConName   = wDataQual pREL_PARR_Name FSLIT("PArr")       parrDataConKey
739 nullPName         = varQual pREL_PARR_Name FSLIT("nullP")        nullPIdKey
740 lengthPName       = varQual pREL_PARR_Name FSLIT("lengthP")      lengthPIdKey
741 replicatePName    = varQual pREL_PARR_Name FSLIT("replicateP")   replicatePIdKey
742 mapPName          = varQual pREL_PARR_Name FSLIT("mapP")         mapPIdKey
743 filterPName       = varQual pREL_PARR_Name FSLIT("filterP")      filterPIdKey
744 zipPName          = varQual pREL_PARR_Name FSLIT("zipP")         zipPIdKey
745 crossPName        = varQual pREL_PARR_Name FSLIT("crossP")       crossPIdKey
746 indexPName        = varQual pREL_PARR_Name FSLIT("!:")           indexPIdKey
747 toPName           = varQual pREL_PARR_Name FSLIT("toP")          toPIdKey
748 bpermutePName     = varQual pREL_PARR_Name FSLIT("bpermuteP")    bpermutePIdKey
749 bpermuteDftPName  = varQual pREL_PARR_Name FSLIT("bpermuteDftP") bpermuteDftPIdKey
750 indexOfPName      = varQual pREL_PARR_Name FSLIT("indexOfP")     indexOfPIdKey
751
752 -- IOBase things
753 ioTyConName       = tcQual   pREL_IO_BASE_Name FSLIT("IO") ioTyConKey
754 ioDataConName     = dataQual pREL_IO_BASE_Name FSLIT("IO") ioDataConKey
755 thenIOName        = varQual  pREL_IO_BASE_Name FSLIT("thenIO") thenIOIdKey
756 bindIOName        = varQual  pREL_IO_BASE_Name FSLIT("bindIO") bindIOIdKey
757 returnIOName      = varQual  pREL_IO_BASE_Name FSLIT("returnIO") returnIOIdKey
758 failIOName        = varQual  pREL_IO_BASE_Name FSLIT("failIO") failIOIdKey
759
760 -- IO things
761 printName         = varQual sYSTEM_IO_Name FSLIT("print") printIdKey
762
763 -- Int, Word, and Addr things
764 int8TyConName     = tcQual pREL_INT_Name  FSLIT("Int8") int8TyConKey
765 int16TyConName    = tcQual pREL_INT_Name  FSLIT("Int16") int16TyConKey
766 int32TyConName    = tcQual pREL_INT_Name  FSLIT("Int32") int32TyConKey
767 int64TyConName    = tcQual pREL_INT_Name  FSLIT("Int64") int64TyConKey
768
769 -- Word module
770 word8TyConName    = tcQual   pREL_WORD_Name FSLIT("Word8")  word8TyConKey
771 word16TyConName   = tcQual   pREL_WORD_Name FSLIT("Word16") word16TyConKey
772 word32TyConName   = tcQual   pREL_WORD_Name FSLIT("Word32") word32TyConKey
773 word64TyConName   = tcQual   pREL_WORD_Name FSLIT("Word64") word64TyConKey
774 wordTyConName     = wTcQual   pREL_WORD_Name FSLIT("Word")   wordTyConKey
775 wordDataConName   = wDataQual pREL_WORD_Name FSLIT("W#")     wordDataConKey
776
777 -- Addr module
778 addrTyConName     = wTcQual   aDDR_Name FSLIT("Addr") addrTyConKey
779 addrDataConName   = wDataQual aDDR_Name FSLIT("A#") addrDataConKey
780
781 -- PrelPtr module
782 ptrTyConName      = wTcQual   pREL_PTR_Name FSLIT("Ptr") ptrTyConKey
783 ptrDataConName    = wDataQual pREL_PTR_Name FSLIT("Ptr") ptrDataConKey
784 funPtrTyConName   = wTcQual   pREL_PTR_Name FSLIT("FunPtr") funPtrTyConKey
785 funPtrDataConName = wDataQual pREL_PTR_Name FSLIT("FunPtr") funPtrDataConKey
786
787 -- Byte array types
788 byteArrayTyConName        = tcQual pREL_BYTEARR_Name  FSLIT("ByteArray") byteArrayTyConKey
789 mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  FSLIT("MutableByteArray") mutableByteArrayTyConKey
790
791 -- Foreign objects and weak pointers
792 stablePtrTyConName    = tcQual   pREL_STABLE_Name FSLIT("StablePtr") stablePtrTyConKey
793 stablePtrDataConName  = dataQual pREL_STABLE_Name FSLIT("StablePtr") stablePtrDataConKey
794 newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStablePtrIdKey
795
796 -- Error module
797 errorName                = wVarQual pREL_ERR_Name FSLIT("error")                errorIdKey
798 assertErrorName          = wVarQual pREL_ERR_Name FSLIT("assertError")          assertErrorIdKey
799 recSelErrorName          = wVarQual pREL_ERR_Name FSLIT("recSelError")          recSelErrorIdKey
800 runtimeErrorName         = wVarQual pREL_ERR_Name FSLIT("runtimeError")         runtimeErrorIdKey
801 irrefutPatErrorName      = wVarQual pREL_ERR_Name FSLIT("irrefutPatError")      irrefutPatErrorIdKey
802 recConErrorName          = wVarQual pREL_ERR_Name FSLIT("recConError")          recConErrorIdKey
803 patErrorName             = wVarQual pREL_ERR_Name FSLIT("patError")             patErrorIdKey
804 noMethodBindingErrorName = wVarQual pREL_ERR_Name FSLIT("noMethodBindingError") noMethodBindingErrorIdKey
805 nonExhaustiveGuardsErrorName 
806   = wVarQual pREL_ERR_Name FSLIT("nonExhaustiveGuardsError") nonExhaustiveGuardsErrorIdKey
807
808 -- PrelST module
809 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
810
811 -- The "split" Id for splittable implicit parameters
812 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
813
814 -- Recursive-do notation
815 mfixName           = varQual mONAD_FIX_Name FSLIT("mfix") mfixIdKey
816 \end{code}
817
818 %************************************************************************
819 %*                                                                      *
820 \subsection{Standard groups of names}
821 %*                                                                      *
822 %************************************************************************
823
824 \begin{code}
825 templateHaskellNames :: NameSet
826 -- The names that are implicitly mentioned by ``bracket''
827 -- Should stay in sync with the import list of DsMeta
828 templateHaskellNames
829   = mkNameSet [ intLName,charLName, plitName, pvarName, ptupName, 
830                 pconName, ptildeName, paspatName, pwildName, 
831                 varName, conName, litName, appName, lamName,
832                 tupName, doEName, compName, 
833                 listExpName, condName, letEName, caseEName,
834                 infixAppName, guardedName, normalName,
835                 bindStName, letStName, noBindStName, parStName,
836                 fromName, fromThenName, fromToName, fromThenToName,
837                 funName, valName, liftName,gensymName, bindQName, 
838                 appendName, matchName, clauseName ]
839 \end{code}
840
841 %************************************************************************
842 %*                                                                      *
843 \subsection{Local helpers}
844 %*                                                                      *
845 %************************************************************************
846
847 All these are original names; hence mkOrig
848
849 \begin{code}
850 varQual  = mk_known_key_name OccNameAlias.varName       -- Note use of local alias vName
851 dataQual = mk_known_key_name dataName
852 tcQual   = mk_known_key_name tcName
853 clsQual  = mk_known_key_name clsName
854
855 wVarQual  = mk_wired_in_name OccNameAlias.varName       -- The wired-in analogues
856 wDataQual = mk_wired_in_name dataName           
857 wTcQual   = mk_wired_in_name tcName
858
859 varQual_RDR  mod str = mkOrig mod (mkOccFS OccNameAlias.varName str)   -- note use of local alias vName
860 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
861 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
862 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
863
864 mk_known_key_name space mod str uniq 
865   = mkKnownKeyExternalName mod (mkOccFS space str) uniq 
866 mk_wired_in_name space mod str uniq 
867   = mkWiredInName (mkVanillaModule mod) (mkOccFS space str) uniq
868
869 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
870         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
871         -- And they don't come from any particular module; indeed we always
872         -- want to print them unqualified.  Hence the LocalName
873 \end{code}
874
875 %************************************************************************
876 %*                                                                      *
877 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
878 %*                                                                      *
879 %************************************************************************
880 --MetaHaskell extension hand allocate keys here
881
882 \begin{code}
883 boundedClassKey         = mkPreludeClassUnique 1 
884 enumClassKey            = mkPreludeClassUnique 2 
885 eqClassKey              = mkPreludeClassUnique 3 
886 floatingClassKey        = mkPreludeClassUnique 5 
887 fractionalClassKey      = mkPreludeClassUnique 6 
888 integralClassKey        = mkPreludeClassUnique 7 
889 monadClassKey           = mkPreludeClassUnique 8 
890 functorClassKey         = mkPreludeClassUnique 10
891 numClassKey             = mkPreludeClassUnique 11
892 ordClassKey             = mkPreludeClassUnique 12
893 readClassKey            = mkPreludeClassUnique 13
894 realClassKey            = mkPreludeClassUnique 14
895 realFloatClassKey       = mkPreludeClassUnique 15
896 realFracClassKey        = mkPreludeClassUnique 16
897 showClassKey            = mkPreludeClassUnique 17
898
899 cCallableClassKey       = mkPreludeClassUnique 18
900 cReturnableClassKey     = mkPreludeClassUnique 19
901
902 ixClassKey              = mkPreludeClassUnique 20
903 \end{code}
904
905 %************************************************************************
906 %*                                                                      *
907 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
908 %*                                                                      *
909 %************************************************************************
910
911 \begin{code}
912 addrPrimTyConKey                        = mkPreludeTyConUnique  1
913 addrTyConKey                            = mkPreludeTyConUnique  2
914 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
915 boolTyConKey                            = mkPreludeTyConUnique  4
916 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
917 charPrimTyConKey                        = mkPreludeTyConUnique  7
918 charTyConKey                            = mkPreludeTyConUnique  8
919 doublePrimTyConKey                      = mkPreludeTyConUnique  9
920 doubleTyConKey                          = mkPreludeTyConUnique 10 
921 floatPrimTyConKey                       = mkPreludeTyConUnique 11
922 floatTyConKey                           = mkPreludeTyConUnique 12
923 funTyConKey                             = mkPreludeTyConUnique 13
924 intPrimTyConKey                         = mkPreludeTyConUnique 14
925 intTyConKey                             = mkPreludeTyConUnique 15
926 int8TyConKey                            = mkPreludeTyConUnique 16
927 int16TyConKey                           = mkPreludeTyConUnique 17
928 int32PrimTyConKey                       = mkPreludeTyConUnique 18
929 int32TyConKey                           = mkPreludeTyConUnique 19
930 int64PrimTyConKey                       = mkPreludeTyConUnique 20
931 int64TyConKey                           = mkPreludeTyConUnique 21
932 integerTyConKey                         = mkPreludeTyConUnique 22
933 listTyConKey                            = mkPreludeTyConUnique 23
934 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
935 weakPrimTyConKey                        = mkPreludeTyConUnique 27
936 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
937 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
938 orderingTyConKey                        = mkPreludeTyConUnique 30
939 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
940 ratioTyConKey                           = mkPreludeTyConUnique 32
941 rationalTyConKey                        = mkPreludeTyConUnique 33
942 realWorldTyConKey                       = mkPreludeTyConUnique 34
943 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
944 stablePtrTyConKey                       = mkPreludeTyConUnique 36
945 statePrimTyConKey                       = mkPreludeTyConUnique 50
946 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
947 stableNameTyConKey                      = mkPreludeTyConUnique 52
948 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
949 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
950 ioTyConKey                              = mkPreludeTyConUnique 56
951 byteArrayTyConKey                       = mkPreludeTyConUnique 57
952 wordPrimTyConKey                        = mkPreludeTyConUnique 58
953 wordTyConKey                            = mkPreludeTyConUnique 59
954 word8TyConKey                           = mkPreludeTyConUnique 60
955 word16TyConKey                          = mkPreludeTyConUnique 61 
956 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
957 word32TyConKey                          = mkPreludeTyConUnique 63
958 word64PrimTyConKey                      = mkPreludeTyConUnique 64
959 word64TyConKey                          = mkPreludeTyConUnique 65
960 liftedConKey                            = mkPreludeTyConUnique 66
961 unliftedConKey                          = mkPreludeTyConUnique 67
962 anyBoxConKey                            = mkPreludeTyConUnique 68
963 kindConKey                              = mkPreludeTyConUnique 69
964 boxityConKey                            = mkPreludeTyConUnique 70
965 typeConKey                              = mkPreludeTyConUnique 71
966 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
967 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
968 ptrTyConKey                             = mkPreludeTyConUnique 74
969 funPtrTyConKey                          = mkPreludeTyConUnique 75
970
971 -- Usage type constructors
972 usageConKey                             = mkPreludeTyConUnique 76
973 usOnceTyConKey                          = mkPreludeTyConUnique 77
974 usManyTyConKey                          = mkPreludeTyConUnique 78
975
976 -- Generic Type Constructors
977 crossTyConKey                           = mkPreludeTyConUnique 79
978 plusTyConKey                            = mkPreludeTyConUnique 80
979 genUnitTyConKey                         = mkPreludeTyConUnique 81
980
981 -- Parallel array type constructor
982 parrTyConKey                            = mkPreludeTyConUnique 82
983
984 -- Template Haskell
985 qTyConKey    = mkPreludeTyConUnique 83
986 exprTyConKey = mkPreludeTyConUnique 84
987 declTyConKey = mkPreludeTyConUnique 85
988 pattTyConKey = mkPreludeTyConUnique 86
989 mtchTyConKey = mkPreludeTyConUnique 87
990 clseTyConKey = mkPreludeTyConUnique 88
991 stmtTyConKey = mkPreludeTyConUnique 89
992 expTyConKey  = mkPreludeTyConUnique 90
993 matTyConKey  = mkPreludeTyConUnique 91
994 clsTyConKey  = mkPreludeTyConUnique 92
995
996 unitTyConKey = mkTupleTyConUnique Boxed 0
997 \end{code}
998
999 %************************************************************************
1000 %*                                                                      *
1001 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
1002 %*                                                                      *
1003 %************************************************************************
1004
1005 \begin{code}
1006 addrDataConKey                          = mkPreludeDataConUnique  0
1007 charDataConKey                          = mkPreludeDataConUnique  1
1008 consDataConKey                          = mkPreludeDataConUnique  2
1009 doubleDataConKey                        = mkPreludeDataConUnique  3
1010 falseDataConKey                         = mkPreludeDataConUnique  4
1011 floatDataConKey                         = mkPreludeDataConUnique  5
1012 intDataConKey                           = mkPreludeDataConUnique  6
1013 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
1014 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
1015 nilDataConKey                           = mkPreludeDataConUnique 11
1016 ratioDataConKey                         = mkPreludeDataConUnique 12
1017 stablePtrDataConKey                     = mkPreludeDataConUnique 13
1018 stableNameDataConKey                    = mkPreludeDataConUnique 14
1019 trueDataConKey                          = mkPreludeDataConUnique 15
1020 wordDataConKey                          = mkPreludeDataConUnique 16
1021 ioDataConKey                            = mkPreludeDataConUnique 17
1022 ptrDataConKey                           = mkPreludeDataConUnique 18
1023 funPtrDataConKey                        = mkPreludeDataConUnique 19
1024
1025 -- Generic data constructors
1026 crossDataConKey                         = mkPreludeDataConUnique 20
1027 inlDataConKey                           = mkPreludeDataConUnique 21
1028 inrDataConKey                           = mkPreludeDataConUnique 22
1029 genUnitDataConKey                       = mkPreludeDataConUnique 23
1030
1031 -- Data constructor for parallel arrays
1032 parrDataConKey                          = mkPreludeDataConUnique 24
1033 \end{code}
1034
1035 %************************************************************************
1036 %*                                                                      *
1037 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1038 %*                                                                      *
1039 %************************************************************************
1040
1041 \begin{code}
1042 absentErrorIdKey              = mkPreludeMiscIdUnique  1
1043 getTagIdKey                   = mkPreludeMiscIdUnique  2
1044 augmentIdKey                  = mkPreludeMiscIdUnique  3
1045 appendIdKey                   = mkPreludeMiscIdUnique  4
1046 buildIdKey                    = mkPreludeMiscIdUnique  5
1047 errorIdKey                    = mkPreludeMiscIdUnique  6
1048 foldlIdKey                    = mkPreludeMiscIdUnique  7
1049 foldrIdKey                    = mkPreludeMiscIdUnique  8
1050 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
1051 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
1052 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
1053 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
1054 integerZeroIdKey              = mkPreludeMiscIdUnique 13
1055 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
1056 seqIdKey                      = mkPreludeMiscIdUnique 15
1057 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
1058 eqStringIdKey                 = mkPreludeMiscIdUnique 17
1059 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
1060 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1061 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
1062 parErrorIdKey                 = mkPreludeMiscIdUnique 21
1063 parIdKey                      = mkPreludeMiscIdUnique 22
1064 patErrorIdKey                 = mkPreludeMiscIdUnique 23
1065 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
1066 recConErrorIdKey              = mkPreludeMiscIdUnique 25
1067 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
1068 traceIdKey                    = mkPreludeMiscIdUnique 27
1069 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
1070 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
1071 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
1072 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
1073
1074 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
1075 concatIdKey                   = mkPreludeMiscIdUnique 33
1076 filterIdKey                   = mkPreludeMiscIdUnique 34
1077 zipIdKey                      = mkPreludeMiscIdUnique 35
1078 bindIOIdKey                   = mkPreludeMiscIdUnique 36
1079 returnIOIdKey                 = mkPreludeMiscIdUnique 37
1080 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
1081 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
1082 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
1083 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
1084 printIdKey                    = mkPreludeMiscIdUnique 43
1085 failIOIdKey                   = mkPreludeMiscIdUnique 44
1086 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
1087 voidArgIdKey                  = mkPreludeMiscIdUnique 47
1088 splitIdKey                    = mkPreludeMiscIdUnique 48
1089 fstIdKey                      = mkPreludeMiscIdUnique 49
1090 sndIdKey                      = mkPreludeMiscIdUnique 50
1091 otherwiseIdKey                = mkPreludeMiscIdUnique 51
1092 assertIdKey                   = mkPreludeMiscIdUnique 53
1093 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
1094
1095 dollarMainKey                 = mkPreludeMiscIdUnique 55
1096 runMainKey                    = mkPreludeMiscIdUnique 56
1097
1098 andIdKey                      = mkPreludeMiscIdUnique 57
1099 orIdKey                       = mkPreludeMiscIdUnique 58
1100 thenIOIdKey                   = mkPreludeMiscIdUnique 59
1101 lazyIdKey                     = mkPreludeMiscIdUnique 60
1102 assertErrorIdKey              = mkPreludeMiscIdUnique 61
1103
1104 -- Parallel array functions
1105 nullPIdKey                    = mkPreludeMiscIdUnique 80
1106 lengthPIdKey                  = mkPreludeMiscIdUnique 81
1107 replicatePIdKey               = mkPreludeMiscIdUnique 82
1108 mapPIdKey                     = mkPreludeMiscIdUnique 83
1109 filterPIdKey                  = mkPreludeMiscIdUnique 84
1110 zipPIdKey                     = mkPreludeMiscIdUnique 85
1111 crossPIdKey                   = mkPreludeMiscIdUnique 86
1112 indexPIdKey                   = mkPreludeMiscIdUnique 87
1113 toPIdKey                      = mkPreludeMiscIdUnique 88
1114 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
1115 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
1116 bpermutePIdKey                = mkPreludeMiscIdUnique 91
1117 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
1118 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
1119 \end{code}
1120
1121 Certain class operations from Prelude classes.  They get their own
1122 uniques so we can look them up easily when we want to conjure them up
1123 during type checking.
1124
1125 \begin{code}
1126         -- Just a place holder for  unbound variables  produced by the renamer:
1127 unboundKey                    = mkPreludeMiscIdUnique 101 
1128
1129 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
1130 minusClassOpKey               = mkPreludeMiscIdUnique 103
1131 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
1132 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
1133 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
1134 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
1135 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
1136 eqClassOpKey                  = mkPreludeMiscIdUnique 109
1137 geClassOpKey                  = mkPreludeMiscIdUnique 110
1138 negateClassOpKey              = mkPreludeMiscIdUnique 111
1139 failMClassOpKey               = mkPreludeMiscIdUnique 112
1140 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
1141 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
1142 returnMClassOpKey             = mkPreludeMiscIdUnique 117
1143
1144 -- MetaHaskell Extension, (text4 118) from Meta/work/gen.hs
1145 intLIdKey       = mkPreludeMiscIdUnique 118
1146 charLIdKey      = mkPreludeMiscIdUnique 119
1147 plitIdKey       = mkPreludeMiscIdUnique 120
1148 pvarIdKey       = mkPreludeMiscIdUnique 121
1149 ptupIdKey       = mkPreludeMiscIdUnique 122
1150 pconIdKey       = mkPreludeMiscIdUnique 123
1151 ptildeIdKey     = mkPreludeMiscIdUnique 124
1152 paspatIdKey     = mkPreludeMiscIdUnique 125
1153 pwildIdKey      = mkPreludeMiscIdUnique 126
1154 varIdKey        = mkPreludeMiscIdUnique 127
1155 conIdKey        = mkPreludeMiscIdUnique 128
1156 litIdKey        = mkPreludeMiscIdUnique 129
1157 appIdKey        = mkPreludeMiscIdUnique 130
1158 infixEIdKey     = mkPreludeMiscIdUnique 131
1159 lamIdKey        = mkPreludeMiscIdUnique 132
1160 tupIdKey        = mkPreludeMiscIdUnique 133
1161 doEIdKey        = mkPreludeMiscIdUnique 134
1162 compIdKey       = mkPreludeMiscIdUnique 135
1163 listExpIdKey    = mkPreludeMiscIdUnique 137
1164 condIdKey       = mkPreludeMiscIdUnique 138
1165 letEIdKey       = mkPreludeMiscIdUnique 139
1166 caseEIdKey      = mkPreludeMiscIdUnique 140
1167 infixAppIdKey   = mkPreludeMiscIdUnique 141
1168 sectionLIdKey   = mkPreludeMiscIdUnique 142
1169 sectionRIdKey   = mkPreludeMiscIdUnique 143
1170 guardedIdKey    = mkPreludeMiscIdUnique 144
1171 normalIdKey     = mkPreludeMiscIdUnique 145
1172 bindStIdKey     = mkPreludeMiscIdUnique 146
1173 letStIdKey      = mkPreludeMiscIdUnique 147
1174 noBindStIdKey   = mkPreludeMiscIdUnique 148
1175 parStIdKey      = mkPreludeMiscIdUnique 149
1176 fromIdKey       = mkPreludeMiscIdUnique 150
1177 fromThenIdKey   = mkPreludeMiscIdUnique 151
1178 fromToIdKey     = mkPreludeMiscIdUnique 152
1179 fromThenToIdKey = mkPreludeMiscIdUnique 153
1180 liftIdKey       = mkPreludeMiscIdUnique 154
1181 gensymIdKey     = mkPreludeMiscIdUnique 155
1182 returnQIdKey    = mkPreludeMiscIdUnique 156
1183 bindQIdKey      = mkPreludeMiscIdUnique 157
1184 funIdKey        = mkPreludeMiscIdUnique 158
1185 valIdKey        = mkPreludeMiscIdUnique 159
1186 protoIdKey      = mkPreludeMiscIdUnique 160
1187 matchIdKey      = mkPreludeMiscIdUnique 161
1188 clauseIdKey     = mkPreludeMiscIdUnique 162
1189
1190 -- Recursive do notation
1191 mfixIdKey       = mkPreludeMiscIdUnique 163
1192 \end{code}
1193
1194
1195 %************************************************************************
1196 %*                                                                      *
1197 \subsection{Standard groups of types}
1198 %*                                                                      *
1199 %************************************************************************
1200
1201 \begin{code}
1202 numericTyKeys = 
1203         [ addrTyConKey
1204         , wordTyConKey
1205         , intTyConKey
1206         , integerTyConKey
1207         , doubleTyConKey
1208         , floatTyConKey
1209         ]
1210
1211         -- Renamer always imports these data decls replete with constructors
1212         -- so that desugarer can always see their constructors.  Ugh!
1213 cCallishTyKeys = 
1214         [ addrTyConKey
1215         , wordTyConKey
1216         , byteArrayTyConKey
1217         , mutableByteArrayTyConKey
1218         , stablePtrTyConKey
1219         , int8TyConKey
1220         , int16TyConKey
1221         , int32TyConKey
1222         , int64TyConKey
1223         , word8TyConKey
1224         , word16TyConKey
1225         , word32TyConKey
1226         , word64TyConKey
1227         ]
1228 \end{code}
1229
1230
1231 %************************************************************************
1232 %*                                                                      *
1233 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1234 %*                                                                      *
1235 %************************************************************************
1236
1237 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1238 even though every numeric class has these two as a superclass,
1239 because the list of ambiguous dictionaries hasn't been simplified.
1240
1241 \begin{code}
1242 numericClassKeys =
1243         [ numClassKey
1244         , realClassKey
1245         , integralClassKey
1246         ]
1247         ++ fractionalClassKeys
1248
1249 fractionalClassKeys = 
1250         [ fractionalClassKey
1251         , floatingClassKey
1252         , realFracClassKey
1253         , realFloatClassKey
1254         ]
1255
1256         -- the strictness analyser needs to know about numeric types
1257         -- (see SaAbsInt.lhs)
1258 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1259         [ readClassKey
1260         ]
1261
1262 cCallishClassKeys = 
1263         [ cCallableClassKey
1264         , cReturnableClassKey
1265         ]
1266
1267 standardClassKeys
1268   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1269     --
1270     -- We have to have "CCallable" and "CReturnable" in the standard
1271     -- classes, so that if you go...
1272     --
1273     --      _ccall_ foo ... 93{-numeric literal-} ...
1274     --
1275     -- ... it can do The Right Thing on the 93.
1276
1277 noDictClassKeys         -- These classes are used only for type annotations;
1278                         -- they are not implemented by dictionaries, ever.
1279   = cCallishClassKeys
1280 \end{code}
1281
1282 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1283 (@TcDeriv@).
1284
1285 \begin{code}
1286 derivableClassKeys
1287   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1288       boundedClassKey, showClassKey, readClassKey ]
1289 \end{code}
1290