[project @ 2002-09-13 15:02:25 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, 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 recSelErrorName          = wVarQual pREL_ERR_Name FSLIT("recSelError")          recSelErrorIdKey
795 runtimeErrorName         = wVarQual pREL_ERR_Name FSLIT("runtimeError")         runtimeErrorIdKey
796 irrefutPatErrorName      = wVarQual pREL_ERR_Name FSLIT("irrefutPatError")      irrefutPatErrorIdKey
797 recConErrorName          = wVarQual pREL_ERR_Name FSLIT("recConError")          recConErrorIdKey
798 patErrorName             = wVarQual pREL_ERR_Name FSLIT("patError")             patErrorIdKey
799 noMethodBindingErrorName = wVarQual pREL_ERR_Name FSLIT("noMethodBindingError") noMethodBindingErrorIdKey
800 nonExhaustiveGuardsErrorName 
801   = wVarQual pREL_ERR_Name FSLIT("nonExhaustiveGuardsError") nonExhaustiveGuardsErrorIdKey
802
803 -- PrelST module
804 runSTRepName       = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
805
806 -- The "split" Id for splittable implicit parameters
807 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
808 \end{code}
809
810 %************************************************************************
811 %*                                                                      *
812 \subsection{Standard groups of names}
813 %*                                                                      *
814 %************************************************************************
815
816 \begin{code}
817 templateHaskellNames :: NameSet
818 -- The names that are implicitly mentioned by ``bracket''
819 -- Should stay in sync with the import list of DsMeta
820 templateHaskellNames
821   = mkNameSet [ intLName,charLName, plitName, pvarName, ptupName, 
822                 pconName, ptildeName, paspatName, pwildName, 
823                 varName, conName, litName, appName, lamName,
824                 tupName, doEName, compName, 
825                 listExpName, condName, letEName, caseEName,
826                 infixAppName, guardedName, normalName,
827                 bindStName, letStName, noBindStName, parStName,
828                 fromName, fromThenName, fromToName, fromThenToName,
829                 funName, valName, liftName,gensymName, bindQName, 
830                 appendName, matchName, clauseName ]
831 \end{code}
832
833 %************************************************************************
834 %*                                                                      *
835 \subsection{Local helpers}
836 %*                                                                      *
837 %************************************************************************
838
839 All these are original names; hence mkOrig
840
841 \begin{code}
842 varQual  = mk_known_key_name OccNameAlias.varName       -- Note use of local alias vName
843 dataQual = mk_known_key_name dataName
844 tcQual   = mk_known_key_name tcName
845 clsQual  = mk_known_key_name clsName
846
847 wVarQual  = mk_wired_in_name OccNameAlias.varName       -- The wired-in analogues
848 wDataQual = mk_wired_in_name dataName           
849 wTcQual   = mk_wired_in_name tcName
850
851 varQual_RDR  mod str = mkOrig mod (mkOccFS OccNameAlias.varName str)   -- note use of local alias vName
852 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
853 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
854 dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
855
856 mk_known_key_name space mod str uniq 
857   = mkKnownKeyExternalName mod (mkOccFS space str) uniq 
858 mk_wired_in_name space mod str uniq 
859   = mkWiredInName (mkVanillaModule mod) (mkOccFS space str) uniq
860
861 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
862         -- Kinds are not z-encoded in interface file, hence mkKindOccFS
863         -- And they don't come from any particular module; indeed we always
864         -- want to print them unqualified.  Hence the LocalName
865 \end{code}
866
867 %************************************************************************
868 %*                                                                      *
869 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
870 %*                                                                      *
871 %************************************************************************
872 --MetaHaskell extension hand allocate keys here
873
874 \begin{code}
875 boundedClassKey         = mkPreludeClassUnique 1 
876 enumClassKey            = mkPreludeClassUnique 2 
877 eqClassKey              = mkPreludeClassUnique 3 
878 floatingClassKey        = mkPreludeClassUnique 5 
879 fractionalClassKey      = mkPreludeClassUnique 6 
880 integralClassKey        = mkPreludeClassUnique 7 
881 monadClassKey           = mkPreludeClassUnique 8 
882 functorClassKey         = mkPreludeClassUnique 10
883 numClassKey             = mkPreludeClassUnique 11
884 ordClassKey             = mkPreludeClassUnique 12
885 readClassKey            = mkPreludeClassUnique 13
886 realClassKey            = mkPreludeClassUnique 14
887 realFloatClassKey       = mkPreludeClassUnique 15
888 realFracClassKey        = mkPreludeClassUnique 16
889 showClassKey            = mkPreludeClassUnique 17
890
891 cCallableClassKey       = mkPreludeClassUnique 18
892 cReturnableClassKey     = mkPreludeClassUnique 19
893
894 ixClassKey              = mkPreludeClassUnique 20
895 \end{code}
896
897 %************************************************************************
898 %*                                                                      *
899 \subsubsection[Uniques-prelude-TyCons]{@Uniques@ for wired-in @TyCons@}
900 %*                                                                      *
901 %************************************************************************
902
903 \begin{code}
904 addrPrimTyConKey                        = mkPreludeTyConUnique  1
905 addrTyConKey                            = mkPreludeTyConUnique  2
906 arrayPrimTyConKey                       = mkPreludeTyConUnique  3
907 boolTyConKey                            = mkPreludeTyConUnique  4
908 byteArrayPrimTyConKey                   = mkPreludeTyConUnique  5
909 charPrimTyConKey                        = mkPreludeTyConUnique  7
910 charTyConKey                            = mkPreludeTyConUnique  8
911 doublePrimTyConKey                      = mkPreludeTyConUnique  9
912 doubleTyConKey                          = mkPreludeTyConUnique 10 
913 floatPrimTyConKey                       = mkPreludeTyConUnique 11
914 floatTyConKey                           = mkPreludeTyConUnique 12
915 funTyConKey                             = mkPreludeTyConUnique 13
916 intPrimTyConKey                         = mkPreludeTyConUnique 14
917 intTyConKey                             = mkPreludeTyConUnique 15
918 int8TyConKey                            = mkPreludeTyConUnique 16
919 int16TyConKey                           = mkPreludeTyConUnique 17
920 int32PrimTyConKey                       = mkPreludeTyConUnique 18
921 int32TyConKey                           = mkPreludeTyConUnique 19
922 int64PrimTyConKey                       = mkPreludeTyConUnique 20
923 int64TyConKey                           = mkPreludeTyConUnique 21
924 integerTyConKey                         = mkPreludeTyConUnique 22
925 listTyConKey                            = mkPreludeTyConUnique 23
926 foreignObjPrimTyConKey                  = mkPreludeTyConUnique 24
927 weakPrimTyConKey                        = mkPreludeTyConUnique 27
928 mutableArrayPrimTyConKey                = mkPreludeTyConUnique 28
929 mutableByteArrayPrimTyConKey            = mkPreludeTyConUnique 29
930 orderingTyConKey                        = mkPreludeTyConUnique 30
931 mVarPrimTyConKey                        = mkPreludeTyConUnique 31
932 ratioTyConKey                           = mkPreludeTyConUnique 32
933 rationalTyConKey                        = mkPreludeTyConUnique 33
934 realWorldTyConKey                       = mkPreludeTyConUnique 34
935 stablePtrPrimTyConKey                   = mkPreludeTyConUnique 35
936 stablePtrTyConKey                       = mkPreludeTyConUnique 36
937 statePrimTyConKey                       = mkPreludeTyConUnique 50
938 stableNamePrimTyConKey                  = mkPreludeTyConUnique 51
939 stableNameTyConKey                      = mkPreludeTyConUnique 52
940 mutableByteArrayTyConKey                = mkPreludeTyConUnique 53
941 mutVarPrimTyConKey                      = mkPreludeTyConUnique 55
942 ioTyConKey                              = mkPreludeTyConUnique 56
943 byteArrayTyConKey                       = mkPreludeTyConUnique 57
944 wordPrimTyConKey                        = mkPreludeTyConUnique 58
945 wordTyConKey                            = mkPreludeTyConUnique 59
946 word8TyConKey                           = mkPreludeTyConUnique 60
947 word16TyConKey                          = mkPreludeTyConUnique 61 
948 word32PrimTyConKey                      = mkPreludeTyConUnique 62 
949 word32TyConKey                          = mkPreludeTyConUnique 63
950 word64PrimTyConKey                      = mkPreludeTyConUnique 64
951 word64TyConKey                          = mkPreludeTyConUnique 65
952 liftedConKey                            = mkPreludeTyConUnique 66
953 unliftedConKey                          = mkPreludeTyConUnique 67
954 anyBoxConKey                            = mkPreludeTyConUnique 68
955 kindConKey                              = mkPreludeTyConUnique 69
956 boxityConKey                            = mkPreludeTyConUnique 70
957 typeConKey                              = mkPreludeTyConUnique 71
958 threadIdPrimTyConKey                    = mkPreludeTyConUnique 72
959 bcoPrimTyConKey                         = mkPreludeTyConUnique 73
960 ptrTyConKey                             = mkPreludeTyConUnique 74
961 funPtrTyConKey                          = mkPreludeTyConUnique 75
962
963 -- Usage type constructors
964 usageConKey                             = mkPreludeTyConUnique 76
965 usOnceTyConKey                          = mkPreludeTyConUnique 77
966 usManyTyConKey                          = mkPreludeTyConUnique 78
967
968 -- Generic Type Constructors
969 crossTyConKey                           = mkPreludeTyConUnique 79
970 plusTyConKey                            = mkPreludeTyConUnique 80
971 genUnitTyConKey                         = mkPreludeTyConUnique 81
972
973 -- Parallel array type constructor
974 parrTyConKey                            = mkPreludeTyConUnique 82
975
976 -- Template Haskell
977 qTyConKey    = mkPreludeTyConUnique 83
978 exprTyConKey = mkPreludeTyConUnique 84
979 declTyConKey = mkPreludeTyConUnique 85
980 pattTyConKey = mkPreludeTyConUnique 86
981 mtchTyConKey = mkPreludeTyConUnique 87
982 clseTyConKey = mkPreludeTyConUnique 88
983 stmtTyConKey = mkPreludeTyConUnique 89
984 expTyConKey  = mkPreludeTyConUnique 90
985 matTyConKey  = mkPreludeTyConUnique 91
986 clsTyConKey  = mkPreludeTyConUnique 92
987
988 unitTyConKey = mkTupleTyConUnique Boxed 0
989 \end{code}
990
991 %************************************************************************
992 %*                                                                      *
993 \subsubsection[Uniques-prelude-DataCons]{@Uniques@ for wired-in @DataCons@}
994 %*                                                                      *
995 %************************************************************************
996
997 \begin{code}
998 addrDataConKey                          = mkPreludeDataConUnique  0
999 charDataConKey                          = mkPreludeDataConUnique  1
1000 consDataConKey                          = mkPreludeDataConUnique  2
1001 doubleDataConKey                        = mkPreludeDataConUnique  3
1002 falseDataConKey                         = mkPreludeDataConUnique  4
1003 floatDataConKey                         = mkPreludeDataConUnique  5
1004 intDataConKey                           = mkPreludeDataConUnique  6
1005 smallIntegerDataConKey                  = mkPreludeDataConUnique  7
1006 largeIntegerDataConKey                  = mkPreludeDataConUnique  8
1007 nilDataConKey                           = mkPreludeDataConUnique 11
1008 ratioDataConKey                         = mkPreludeDataConUnique 12
1009 stablePtrDataConKey                     = mkPreludeDataConUnique 13
1010 stableNameDataConKey                    = mkPreludeDataConUnique 14
1011 trueDataConKey                          = mkPreludeDataConUnique 15
1012 wordDataConKey                          = mkPreludeDataConUnique 16
1013 ioDataConKey                            = mkPreludeDataConUnique 17
1014 ptrDataConKey                           = mkPreludeDataConUnique 18
1015 funPtrDataConKey                        = mkPreludeDataConUnique 19
1016
1017 -- Generic data constructors
1018 crossDataConKey                         = mkPreludeDataConUnique 20
1019 inlDataConKey                           = mkPreludeDataConUnique 21
1020 inrDataConKey                           = mkPreludeDataConUnique 22
1021 genUnitDataConKey                       = mkPreludeDataConUnique 23
1022
1023 -- Data constructor for parallel arrays
1024 parrDataConKey                          = mkPreludeDataConUnique 24
1025 \end{code}
1026
1027 %************************************************************************
1028 %*                                                                      *
1029 \subsubsection[Uniques-prelude-Ids]{@Uniques@ for wired-in @Ids@ (except @DataCons@)}
1030 %*                                                                      *
1031 %************************************************************************
1032
1033 \begin{code}
1034 absentErrorIdKey              = mkPreludeMiscIdUnique  1
1035 getTagIdKey                   = mkPreludeMiscIdUnique  2
1036 augmentIdKey                  = mkPreludeMiscIdUnique  3
1037 appendIdKey                   = mkPreludeMiscIdUnique  4
1038 buildIdKey                    = mkPreludeMiscIdUnique  5
1039 errorIdKey                    = mkPreludeMiscIdUnique  6
1040 foldlIdKey                    = mkPreludeMiscIdUnique  7
1041 foldrIdKey                    = mkPreludeMiscIdUnique  8
1042 recSelErrorIdKey              = mkPreludeMiscIdUnique  9
1043 integerMinusOneIdKey          = mkPreludeMiscIdUnique 10
1044 integerPlusOneIdKey           = mkPreludeMiscIdUnique 11
1045 integerPlusTwoIdKey           = mkPreludeMiscIdUnique 12
1046 integerZeroIdKey              = mkPreludeMiscIdUnique 13
1047 int2IntegerIdKey              = mkPreludeMiscIdUnique 14
1048 seqIdKey                      = mkPreludeMiscIdUnique 15
1049 irrefutPatErrorIdKey          = mkPreludeMiscIdUnique 16
1050 eqStringIdKey                 = mkPreludeMiscIdUnique 17
1051 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 18
1052 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 19
1053 runtimeErrorIdKey             = mkPreludeMiscIdUnique 20 
1054 parErrorIdKey                 = mkPreludeMiscIdUnique 21
1055 parIdKey                      = mkPreludeMiscIdUnique 22
1056 patErrorIdKey                 = mkPreludeMiscIdUnique 23
1057 realWorldPrimIdKey            = mkPreludeMiscIdUnique 24
1058 recConErrorIdKey              = mkPreludeMiscIdUnique 25
1059 recUpdErrorIdKey              = mkPreludeMiscIdUnique 26
1060 traceIdKey                    = mkPreludeMiscIdUnique 27
1061 unpackCStringUtf8IdKey        = mkPreludeMiscIdUnique 28
1062 unpackCStringAppendIdKey      = mkPreludeMiscIdUnique 29
1063 unpackCStringFoldrIdKey       = mkPreludeMiscIdUnique 30
1064 unpackCStringIdKey            = mkPreludeMiscIdUnique 31
1065
1066 unsafeCoerceIdKey             = mkPreludeMiscIdUnique 32
1067 concatIdKey                   = mkPreludeMiscIdUnique 33
1068 filterIdKey                   = mkPreludeMiscIdUnique 34
1069 zipIdKey                      = mkPreludeMiscIdUnique 35
1070 bindIOIdKey                   = mkPreludeMiscIdUnique 36
1071 returnIOIdKey                 = mkPreludeMiscIdUnique 37
1072 deRefStablePtrIdKey           = mkPreludeMiscIdUnique 38
1073 newStablePtrIdKey             = mkPreludeMiscIdUnique 39
1074 plusIntegerIdKey              = mkPreludeMiscIdUnique 41
1075 timesIntegerIdKey             = mkPreludeMiscIdUnique 42
1076 printIdKey                    = mkPreludeMiscIdUnique 43
1077 failIOIdKey                   = mkPreludeMiscIdUnique 44
1078 nullAddrIdKey                 = mkPreludeMiscIdUnique 46
1079 voidArgIdKey                  = mkPreludeMiscIdUnique 47
1080 splitIdKey                    = mkPreludeMiscIdUnique 48
1081 fstIdKey                      = mkPreludeMiscIdUnique 49
1082 sndIdKey                      = mkPreludeMiscIdUnique 50
1083 otherwiseIdKey                = mkPreludeMiscIdUnique 51
1084 assertIdKey                   = mkPreludeMiscIdUnique 53
1085 runSTRepIdKey                 = mkPreludeMiscIdUnique 54
1086
1087 dollarMainKey                 = mkPreludeMiscIdUnique 55
1088 runMainKey                    = mkPreludeMiscIdUnique 56
1089
1090 andIdKey                      = mkPreludeMiscIdUnique 57
1091 orIdKey                       = mkPreludeMiscIdUnique 58
1092 thenIOIdKey                   = mkPreludeMiscIdUnique 59
1093 lazyIdKey                     = mkPreludeMiscIdUnique 60
1094
1095 -- Parallel array functions
1096 nullPIdKey                    = mkPreludeMiscIdUnique 80
1097 lengthPIdKey                  = mkPreludeMiscIdUnique 81
1098 replicatePIdKey               = mkPreludeMiscIdUnique 82
1099 mapPIdKey                     = mkPreludeMiscIdUnique 83
1100 filterPIdKey                  = mkPreludeMiscIdUnique 84
1101 zipPIdKey                     = mkPreludeMiscIdUnique 85
1102 crossPIdKey                   = mkPreludeMiscIdUnique 86
1103 indexPIdKey                   = mkPreludeMiscIdUnique 87
1104 toPIdKey                      = mkPreludeMiscIdUnique 88
1105 enumFromToPIdKey              = mkPreludeMiscIdUnique 89
1106 enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
1107 bpermutePIdKey                = mkPreludeMiscIdUnique 91
1108 bpermuteDftPIdKey             = mkPreludeMiscIdUnique 92
1109 indexOfPIdKey                 = mkPreludeMiscIdUnique 93
1110 \end{code}
1111
1112 Certain class operations from Prelude classes.  They get their own
1113 uniques so we can look them up easily when we want to conjure them up
1114 during type checking.
1115
1116 \begin{code}
1117         -- Just a place holder for  unbound variables  produced by the renamer:
1118 unboundKey                    = mkPreludeMiscIdUnique 101 
1119
1120 fromIntegerClassOpKey         = mkPreludeMiscIdUnique 102
1121 minusClassOpKey               = mkPreludeMiscIdUnique 103
1122 fromRationalClassOpKey        = mkPreludeMiscIdUnique 104
1123 enumFromClassOpKey            = mkPreludeMiscIdUnique 105
1124 enumFromThenClassOpKey        = mkPreludeMiscIdUnique 106
1125 enumFromToClassOpKey          = mkPreludeMiscIdUnique 107
1126 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
1127 eqClassOpKey                  = mkPreludeMiscIdUnique 109
1128 geClassOpKey                  = mkPreludeMiscIdUnique 110
1129 negateClassOpKey              = mkPreludeMiscIdUnique 111
1130 failMClassOpKey               = mkPreludeMiscIdUnique 112
1131 bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
1132 thenMClassOpKey               = mkPreludeMiscIdUnique 114 -- (>>)
1133 returnMClassOpKey             = mkPreludeMiscIdUnique 117
1134
1135 -- MetaHaskell Extension, (text4 118) from Meta/work/gen.hs
1136 intLIdKey       = mkPreludeMiscIdUnique 118
1137 charLIdKey      = mkPreludeMiscIdUnique 119
1138 plitIdKey       = mkPreludeMiscIdUnique 120
1139 pvarIdKey       = mkPreludeMiscIdUnique 121
1140 ptupIdKey       = mkPreludeMiscIdUnique 122
1141 pconIdKey       = mkPreludeMiscIdUnique 123
1142 ptildeIdKey     = mkPreludeMiscIdUnique 124
1143 paspatIdKey     = mkPreludeMiscIdUnique 125
1144 pwildIdKey      = mkPreludeMiscIdUnique 126
1145 varIdKey        = mkPreludeMiscIdUnique 127
1146 conIdKey        = mkPreludeMiscIdUnique 128
1147 litIdKey        = mkPreludeMiscIdUnique 129
1148 appIdKey        = mkPreludeMiscIdUnique 130
1149 infixEIdKey     = mkPreludeMiscIdUnique 131
1150 lamIdKey        = mkPreludeMiscIdUnique 132
1151 tupIdKey        = mkPreludeMiscIdUnique 133
1152 doEIdKey        = mkPreludeMiscIdUnique 134
1153 compIdKey       = mkPreludeMiscIdUnique 135
1154 listExpIdKey    = mkPreludeMiscIdUnique 137
1155 condIdKey       = mkPreludeMiscIdUnique 138
1156 letEIdKey       = mkPreludeMiscIdUnique 139
1157 caseEIdKey      = mkPreludeMiscIdUnique 140
1158 infixAppIdKey   = mkPreludeMiscIdUnique 141
1159 sectionLIdKey   = mkPreludeMiscIdUnique 142
1160 sectionRIdKey   = mkPreludeMiscIdUnique 143
1161 guardedIdKey    = mkPreludeMiscIdUnique 144
1162 normalIdKey     = mkPreludeMiscIdUnique 145
1163 bindStIdKey     = mkPreludeMiscIdUnique 146
1164 letStIdKey      = mkPreludeMiscIdUnique 147
1165 noBindStIdKey   = mkPreludeMiscIdUnique 148
1166 parStIdKey      = mkPreludeMiscIdUnique 149
1167 fromIdKey       = mkPreludeMiscIdUnique 150
1168 fromThenIdKey   = mkPreludeMiscIdUnique 151
1169 fromToIdKey     = mkPreludeMiscIdUnique 152
1170 fromThenToIdKey = mkPreludeMiscIdUnique 153
1171 liftIdKey       = mkPreludeMiscIdUnique 154
1172 gensymIdKey     = mkPreludeMiscIdUnique 155
1173 returnQIdKey    = mkPreludeMiscIdUnique 156
1174 bindQIdKey      = mkPreludeMiscIdUnique 157
1175 funIdKey        = mkPreludeMiscIdUnique 158
1176 valIdKey        = mkPreludeMiscIdUnique 159
1177 protoIdKey      = mkPreludeMiscIdUnique 160
1178 matchIdKey      = mkPreludeMiscIdUnique 161
1179 clauseIdKey     = mkPreludeMiscIdUnique 162
1180 \end{code}
1181
1182
1183 %************************************************************************
1184 %*                                                                      *
1185 \subsection{Standard groups of types}
1186 %*                                                                      *
1187 %************************************************************************
1188
1189 \begin{code}
1190 numericTyKeys = 
1191         [ addrTyConKey
1192         , wordTyConKey
1193         , intTyConKey
1194         , integerTyConKey
1195         , doubleTyConKey
1196         , floatTyConKey
1197         ]
1198
1199         -- Renamer always imports these data decls replete with constructors
1200         -- so that desugarer can always see their constructors.  Ugh!
1201 cCallishTyKeys = 
1202         [ addrTyConKey
1203         , wordTyConKey
1204         , byteArrayTyConKey
1205         , mutableByteArrayTyConKey
1206         , stablePtrTyConKey
1207         , int8TyConKey
1208         , int16TyConKey
1209         , int32TyConKey
1210         , int64TyConKey
1211         , word8TyConKey
1212         , word16TyConKey
1213         , word32TyConKey
1214         , word64TyConKey
1215         ]
1216 \end{code}
1217
1218
1219 %************************************************************************
1220 %*                                                                      *
1221 \subsection[Class-std-groups]{Standard groups of Prelude classes}
1222 %*                                                                      *
1223 %************************************************************************
1224
1225 NOTE: @Eq@ and @Text@ do need to appear in @standardClasses@
1226 even though every numeric class has these two as a superclass,
1227 because the list of ambiguous dictionaries hasn't been simplified.
1228
1229 \begin{code}
1230 numericClassKeys =
1231         [ numClassKey
1232         , realClassKey
1233         , integralClassKey
1234         ]
1235         ++ fractionalClassKeys
1236
1237 fractionalClassKeys = 
1238         [ fractionalClassKey
1239         , floatingClassKey
1240         , realFracClassKey
1241         , realFloatClassKey
1242         ]
1243
1244         -- the strictness analyser needs to know about numeric types
1245         -- (see SaAbsInt.lhs)
1246 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
1247         [ readClassKey
1248         ]
1249
1250 cCallishClassKeys = 
1251         [ cCallableClassKey
1252         , cReturnableClassKey
1253         ]
1254
1255 standardClassKeys
1256   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
1257     --
1258     -- We have to have "CCallable" and "CReturnable" in the standard
1259     -- classes, so that if you go...
1260     --
1261     --      _ccall_ foo ... 93{-numeric literal-} ...
1262     --
1263     -- ... it can do The Right Thing on the 93.
1264
1265 noDictClassKeys         -- These classes are used only for type annotations;
1266                         -- they are not implemented by dictionaries, ever.
1267   = cCallishClassKeys
1268 \end{code}
1269
1270 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
1271 (@TcDeriv@).
1272
1273 \begin{code}
1274 derivableClassKeys
1275   = [ eqClassKey, ordClassKey, enumClassKey, ixClassKey,
1276       boundedClassKey, showClassKey, readClassKey ]
1277 \end{code}
1278