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