[project @ 2002-02-05 15:42:04 by simonpj]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
index b72f143..be714d1 100644 (file)
@@ -11,45 +11,16 @@ defined here so as to avod
 
 \begin{code}
 module PrelNames (
-       
        Unique, Uniquable(..), hasKey,  -- Re-exported for convenience
-       knownKeyRdrNames, 
-        mkTupNameStr, mkTupConRdrName,
-
-       ------------------------------------------------------------
-       -- Prelude modules
-       pREL_GHC, pREL_BASE, pREL_ADDR, pREL_STABLE,
-       pREL_IO_BASE, pREL_PACK, pREL_ERR, pREL_NUM, pREL_FLOAT, pREL_REAL,
 
-       ------------------------------------------------------------
-       -- Module names (both Prelude and otherwise)
-       pREL_GHC_Name, pRELUDE_Name, pREL_MAIN_Name, mAIN_Name, 
+       -----------------------------------------------------------
+       module PrelNames,       -- A huge bunch of (a) RdrNames, e.g. intTyCon_RDR
+                               --                 (b) Uniques   e.g. intTyConKey
+                               -- So many that we export them all
 
-       ------------------------------------------------------------
-       -- Original RdrNames for a few things
-        main_RDR, 
-       deRefStablePtr_RDR, makeStablePtr_RDR, 
-       ioTyCon_RDR, ioDataCon_RDR, bindIO_RDR, returnIO_RDR,
-       unpackCString_RDR, unpackCStringFoldr_RDR, unpackCStringUtf8_RDR,
-       eqClass_RDR, foldr_RDR, build_RDR,
-       ccallableClass_RDR, creturnableClass_RDR, 
-       monadClass_RDR, enumClass_RDR, ordClass_RDR,
-       ratioDataCon_RDR, negate_RDR, assertErr_RDR,
-       plusInteger_RDR, timesInteger_RDR, eqString_RDR,
-
-       -- Plus a whole lot more needed only in TcGenDeriv
-       eq_RDR, ne_RDR, not_RDR, compare_RDR, ge_RDR, le_RDR, gt_RDR,
-       ltTag_RDR, eqTag_RDR, gtTag_RDR, getTag_RDR,
-       and_RDR, true_RDR, false_RDR,
-       succ_RDR, pred_RDR, toEnum_RDR, fromEnum_RDR, 
-       minBound_RDR, maxBound_RDR,
-       enumFrom_RDR, enumFromThen_RDR, enumFromTo_RDR, enumFromThenTo_RDR,
-       map_RDR, append_RDR, compose_RDR,
-       plus_RDR, times_RDR, mkInt_RDR, 
-       error_RDR,
-       range_RDR, inRange_RDR, index_RDR,
-       readList___RDR, readList_RDR, readsPrec_RDR, lex_RDR, readParen_RDR,
-       showList_RDR, showList___RDR, showsPrec_RDR, showString_RDR, showSpace_RDR, showParen_RDR,
+       -----------------------------------------------------------
+       knownKeyNames, 
+        mkTupNameStr, mkTupConRdrName,
 
        ------------------------------------------------------------
        -- Goups of classes and types
@@ -58,68 +29,29 @@ module PrelNames (
        derivingOccurrences,    -- For a given class C, this tells what other 
        derivableClassKeys,     -- things are needed as a result of a 
                                -- deriving(C) clause
-       numericTyKeys, cCallishTyKeys, 
-
-       ------------------------------------------------------------
-       -- Keys
-       absentErrorIdKey, addrDataConKey, addrPrimTyConKey, addrTyConKey,
-       appendIdKey, arrayPrimTyConKey, assertIdKey, augmentIdKey,
-       bcoPrimTyConKey, bindIOIdKey, boolTyConKey, boundedClassKey,
-       boxedConKey, buildIdKey, byteArrayPrimTyConKey, byteArrayTyConKey,
-       cCallableClassKey, cReturnableClassKey, charDataConKey,
-       charPrimTyConKey, charTyConKey, concatIdKey, consDataConKey,
-       deRefStablePtrIdKey, doubleDataConKey, doublePrimTyConKey,
-       doubleTyConKey, enumClassKey, enumFromClassOpKey,
-       enumFromThenClassOpKey, enumFromThenToClassOpKey,
-       enumFromToClassOpKey, eqClassKey, eqClassOpKey, eqStringIdKey,
-       errorIdKey, falseDataConKey, failMClassOpKey, filterIdKey,
-       floatDataConKey, floatPrimTyConKey, floatTyConKey, floatingClassKey,
-       foldlIdKey, foldrIdKey, foreignObjDataConKey, foreignObjPrimTyConKey,
-       foreignObjTyConKey, fractionalClassKey, fromEnumClassOpKey,
-       fromIntClassOpKey, fromIntegerClassOpKey, fromRationalClassOpKey,
-       funTyConKey, functorClassKey, geClassOpKey, getTagIdKey,
-       intDataConKey, intPrimTyConKey, intTyConKey, int8TyConKey,
-       int16TyConKey, int32TyConKey, int64PrimTyConKey, int64TyConKey,
-       smallIntegerDataConKey, largeIntegerDataConKey, integerMinusOneIdKey,
-       integerPlusOneIdKey, integerPlusTwoIdKey, int2IntegerIdKey,
-       integerTyConKey, integerZeroIdKey, integralClassKey,
-       irrefutPatErrorIdKey, ixClassKey, listTyConKey, mainKey,
-       makeStablePtrIdKey, mapIdKey, minusClassOpKey, monadClassKey,
-       monadPlusClassKey, mutableArrayPrimTyConKey,
-       mutableByteArrayPrimTyConKey, mutableByteArrayTyConKey,
-       mutVarPrimTyConKey, nilDataConKey, noMethodBindingErrorIdKey,
-       nonExhaustiveGuardsErrorIdKey, numClassKey, anyBoxConKey, ordClassKey,
-       orderingTyConKey, otherwiseIdKey, parErrorIdKey, parIdKey,
-       patErrorIdKey, plusIntegerIdKey, ratioDataConKey, ratioTyConKey,
-       rationalTyConKey, readClassKey, realClassKey, realFloatClassKey,
-       realFracClassKey, realWorldPrimIdKey, realWorldTyConKey,
-       recConErrorIdKey, recSelErrIdKey, recUpdErrorIdKey, returnIOIdKey,
-       returnMClassOpKey, runSTRepIdKey, showClassKey, ioTyConKey,
-       ioDataConKey, stablePtrDataConKey, stablePtrPrimTyConKey,
-       stablePtrTyConKey, stableNameDataConKey, stableNamePrimTyConKey,
-       stableNameTyConKey, statePrimTyConKey, timesIntegerIdKey, typeConKey,
-       kindConKey, boxityConKey, mVarPrimTyConKey, thenMClassOpKey,
-       threadIdPrimTyConKey, toEnumClassOpKey, traceIdKey, trueDataConKey,
-       unboundKey, unboxedConKey, unpackCStringUtf8IdKey,
-       unpackCStringAppendIdKey, unpackCStringFoldrIdKey, unpackCStringIdKey,
-       unsafeCoerceIdKey, ushowListIdKey, weakPrimTyConKey, wordDataConKey,
-       wordPrimTyConKey, wordTyConKey, word8TyConKey, word16TyConKey,
-       word32TyConKey, word64PrimTyConKey, word64TyConKey, zipIdKey
+       numericTyKeys, cCallishTyKeys,
 
+       mkUnboundName, isUnboundName
     ) where
 
 #include "HsVersions.h"
 
-import Module    ( ModuleName, mkPrelModule, mkSrcModule )
-import OccName   ( NameSpace, varName, dataName, tcName, clsName )
-import RdrName   ( RdrName, mkPreludeQual )
+import Module    ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName )
+import OccName   ( NameSpace, UserFS, varName, dataName, tcName, clsName, 
+                   mkKindOccFS, mkOccFS
+                 )
+import RdrName   ( RdrName, mkOrig, mkUnqual )
 import UniqFM
 import Unique    ( Unique, Uniquable(..), hasKey,
                    mkPreludeMiscIdUnique, mkPreludeDataConUnique,
-                   mkPreludeTyConUnique, mkPreludeClassUnique
+                   mkPreludeTyConUnique, mkPreludeClassUnique,
+                   mkTupleTyConUnique
                  ) 
 import BasicTypes ( Boxity(..), Arity )
 import UniqFM    ( UniqFM, listToUFM )
+import Name      ( Name, mkLocalName, mkKnownKeyGlobal, nameRdrName )
+import RdrName    ( rdrNameOcc )
+import SrcLoc     ( builtinSrcLoc, noSrcLoc )
 import Util      ( nOfThem )
 import Panic     ( panic )
 \end{code}
@@ -127,109 +59,138 @@ import Panic       ( panic )
 
 %************************************************************************
 %*                                                                     *
-\subsection{Known key RdrNames}
+\subsection{Local Names}
 %*                                                                     *
 %************************************************************************
 
-This section tells what the compiler knows about the
-assocation of names with uniques
+This *local* name is used by the interactive stuff
 
 \begin{code}
-knownKeyRdrNames :: [(RdrName, Unique)]
-knownKeyRdrNames
+itName uniq = mkLocalName uniq (mkOccFS varName SLIT("it")) noSrcLoc
+\end{code}
+
+\begin{code}
+-- mkUnboundName makes a place-holder Name; it shouldn't be looked at except possibly
+-- during compiler debugging.
+mkUnboundName :: RdrName -> Name
+mkUnboundName rdr_name = mkLocalName unboundKey (rdrNameOcc rdr_name) builtinSrcLoc
+
+isUnboundName :: Name -> Bool
+isUnboundName name = name `hasKey` unboundKey
+\end{code}
+
+
+%************************************************************************
+%*                                                                     *
+\subsection{Known key Names}
+%*                                                                     *
+%************************************************************************
+
+This section tells what the compiler knows about the assocation of
+names with uniques.  These ones are the *non* wired-in ones.  The
+wired in ones are defined in TysWiredIn etc.
+
+\begin{code}
+knownKeyNames :: [Name]
+knownKeyNames
  =  [
        -- Type constructors (synonyms especially)
-      (ioTyCon_RDR,            ioTyConKey)
-    , (main_RDR,               mainKey)
-    , (orderingTyCon_RDR,      orderingTyConKey)
-    , (rationalTyCon_RDR,      rationalTyConKey)
-    , (ratioDataCon_RDR,       ratioDataConKey)
-    , (ratioTyCon_RDR,         ratioTyConKey)
-    , (byteArrayTyCon_RDR,     byteArrayTyConKey)
-    , (mutableByteArrayTyCon_RDR, mutableByteArrayTyConKey)
-    , (foreignObjTyCon_RDR,    foreignObjTyConKey)
-    , (bcoPrimTyCon_RDR,       bcoPrimTyConKey)
-    , (stablePtrTyCon_RDR,     stablePtrTyConKey)
-    , (stablePtrDataCon_RDR,    stablePtrDataConKey)
+       ioTyConName, ioDataConName,
+       runMainName,
+       orderingTyConName,
+       rationalTyConName,
+       ratioDataConName,
+       ratioTyConName,
+       byteArrayTyConName,
+       mutableByteArrayTyConName,
+       foreignObjTyConName,
+       foreignPtrTyConName,
+       bcoPrimTyConName,
+       stablePtrTyConName,
+       stablePtrDataConName,
 
        --  Classes.  *Must* include:
        --      classes that are grabbed by key (e.g., eqClassKey)
        --      classes in "Class.standardClassKeys" (quite a few)
-    , (eqClass_RDR,            eqClassKey)             -- mentioned, derivable
-    , (ordClass_RDR,           ordClassKey)            -- derivable
-    , (boundedClass_RDR,       boundedClassKey)        -- derivable
-    , (numClass_RDR,           numClassKey)            -- mentioned, numeric
-    , (enumClass_RDR,          enumClassKey)           -- derivable
-    , (monadClass_RDR,         monadClassKey)
-    , (monadPlusClass_RDR,     monadPlusClassKey)
-    , (functorClass_RDR,       functorClassKey)
-    , (showClass_RDR,          showClassKey)           -- derivable
-    , (realClass_RDR,          realClassKey)           -- numeric
-    , (integralClass_RDR,      integralClassKey)       -- numeric
-    , (fractionalClass_RDR,    fractionalClassKey)     -- numeric
-    , (floatingClass_RDR,      floatingClassKey)       -- numeric
-    , (realFracClass_RDR,      realFracClassKey)       -- numeric
-    , (realFloatClass_RDR,     realFloatClassKey)      -- numeric
-    , (readClass_RDR,          readClassKey)           -- derivable
-    , (ixClass_RDR,            ixClassKey)             -- derivable (but it isn't Prelude.Ix; hmmm)
-    , (ccallableClass_RDR,     cCallableClassKey)      -- mentioned, ccallish
-    , (creturnableClass_RDR,   cReturnableClassKey)    -- mentioned, ccallish
+       eqClassName,                    -- mentioned, derivable
+       ordClassName,                   -- derivable
+       boundedClassName,               -- derivable
+       numClassName,                   -- mentioned, numeric
+       enumClassName,                  -- derivable
+       monadClassName,
+       monadPlusClassName,
+       functorClassName,
+       showClassName,                  -- derivable
+       realClassName,                  -- numeric
+       integralClassName,              -- numeric
+       fractionalClassName,            -- numeric
+       floatingClassName,              -- numeric
+       realFracClassName,              -- numeric
+       realFloatClassName,             -- numeric
+       readClassName,                  -- derivable
+       ixClassName,                    -- derivable (but it isn't Prelude.Ix; hmmm)
+       cCallableClassName,             -- mentioned, ccallish
+       cReturnableClassName,           -- mentioned, ccallish
 
        -- ClassOps 
-    , (fromInt_RDR,            fromIntClassOpKey)
-    , (fromInteger_RDR,                fromIntegerClassOpKey)
-    , (ge_RDR,                 geClassOpKey) 
-    , (minus_RDR,              minusClassOpKey)
-    , (enumFrom_RDR,           enumFromClassOpKey)
-    , (enumFromThen_RDR,       enumFromThenClassOpKey)
-    , (enumFromTo_RDR,         enumFromToClassOpKey)
-    , (enumFromThenTo_RDR,     enumFromThenToClassOpKey)
-    , (fromEnum_RDR,           fromEnumClassOpKey)
-    , (toEnum_RDR,             toEnumClassOpKey)
-    , (eq_RDR,                 eqClassOpKey)
-    , (thenM_RDR,              thenMClassOpKey)
-    , (returnM_RDR,            returnMClassOpKey)
-    , (failM_RDR,              failMClassOpKey)
-    , (fromRational_RDR,       fromRationalClassOpKey)
+       fromIntegerName,
+       negateName,
+       geName,
+       minusName,
+       enumFromName,
+       enumFromThenName,
+       enumFromToName,
+       enumFromThenToName,
+       fromEnumName,
+       toEnumName,
+       eqName,
+       thenMName,
+       returnMName,
+       failMName,
+       fromRationalName,
     
-    , (deRefStablePtr_RDR,     deRefStablePtrIdKey)
-    , (makeStablePtr_RDR,      makeStablePtrIdKey)
-    , (bindIO_RDR,             bindIOIdKey)
-    , (returnIO_RDR,           returnIOIdKey)
+       deRefStablePtrName,
+       newStablePtrName,
+       bindIOName,
+       returnIOName,
+       failIOName,
 
        -- Strings and lists
-    , (map_RDR,                        mapIdKey)
-    , (append_RDR,             appendIdKey)
-    , (unpackCString_RDR,      unpackCStringIdKey)
-    , (unpackCStringAppend_RDR,        unpackCStringAppendIdKey)
-    , (unpackCStringFoldr_RDR, unpackCStringFoldrIdKey)
-    , (unpackCStringUtf8_RDR,          unpackCStringUtf8IdKey)
+       mapName,
+       appendName,
+       unpackCStringName,
+       unpackCStringAppendName,
+       unpackCStringFoldrName,
+       unpackCStringUtf8Name,
 
        -- List operations
-    , (concat_RDR,             concatIdKey)
-    , (filter_RDR,             filterIdKey)
-    , (zip_RDR,                        zipIdKey)
-    , (foldr_RDR,              foldrIdKey)
-    , (build_RDR,              buildIdKey)
-    , (augment_RDR,            augmentIdKey)
+       concatName,
+       filterName,
+       zipName,
+       foldrName,
+       buildName,
+       augmentName,
 
        -- FFI primitive types that are not wired-in.
-    , (int8TyCon_RDR,           int8TyConKey)
-    , (int16TyCon_RDR,          int16TyConKey)
-    , (int32TyCon_RDR,          int32TyConKey)
-    , (int64TyCon_RDR,          int64TyConKey)
-    , (word8TyCon_RDR,          word8TyConKey)
-    , (word16TyCon_RDR,         word16TyConKey)
-    , (word32TyCon_RDR,         word32TyConKey)
-    , (word64TyCon_RDR,         word64TyConKey)
+       int8TyConName,
+       int16TyConName,
+       int32TyConName,
+       int64TyConName,
+       word8TyConName,
+       word16TyConName,
+       word32TyConName,
+       word64TyConName,
 
        -- Others
-    , (otherwiseId_RDR,                otherwiseIdKey)
-    , (plusInteger_RDR,                plusIntegerIdKey)
-    , (timesInteger_RDR,       timesIntegerIdKey)
-    , (eqString_RDR,           eqStringIdKey)
-    , (assert_RDR,             assertIdKey)
-    , (runSTRep_RDR,           runSTRepIdKey)
+       unsafeCoerceName,
+       otherwiseIdName,
+       plusIntegerName,
+       timesIntegerName,
+       eqStringName,
+       assertName,
+       runSTRepName,
+       printName,
+       splitIdName, fstIdName, sndIdName       -- Used by splittery
     ]
 \end{code}
 
@@ -241,43 +202,55 @@ knownKeyRdrNames
 %************************************************************************
 
 \begin{code}
-pRELUDE_Name      = mkSrcModule "Prelude"
-pREL_GHC_Name     = mkSrcModule "PrelGHC"         -- Primitive types and values
-pREL_BASE_Name    = mkSrcModule "PrelBase"
-pREL_ENUM_Name    = mkSrcModule "PrelEnum"
-pREL_SHOW_Name    = mkSrcModule "PrelShow"
-pREL_READ_Name    = mkSrcModule "PrelRead"
-pREL_NUM_Name     = mkSrcModule "PrelNum"
-pREL_LIST_Name    = mkSrcModule "PrelList"
-pREL_TUP_Name     = mkSrcModule "PrelTup"
-pREL_PACK_Name    = mkSrcModule "PrelPack"
-pREL_CONC_Name    = mkSrcModule "PrelConc"
-pREL_IO_BASE_Name = mkSrcModule "PrelIOBase"
-pREL_ST_Name     = mkSrcModule "PrelST"
-pREL_ARR_Name     = mkSrcModule "PrelArr"
-pREL_BYTEARR_Name = mkSrcModule "PrelByteArr"
-pREL_FOREIGN_Name = mkSrcModule "PrelForeign"
-pREL_STABLE_Name  = mkSrcModule "PrelStable"
-pREL_ADDR_Name    = mkSrcModule "PrelAddr"
-pREL_ERR_Name     = mkSrcModule "PrelErr"
-pREL_REAL_Name    = mkSrcModule "PrelReal"
-pREL_FLOAT_Name   = mkSrcModule "PrelFloat"
-
-pREL_MAIN_Name   = mkSrcModule "PrelMain"
-mAIN_Name       = mkSrcModule "Main"
-iNT_Name        = mkSrcModule "Int"
-wORD_Name       = mkSrcModule "Word"
-
-pREL_GHC     = mkPrelModule pREL_GHC_Name
-pREL_BASE    = mkPrelModule pREL_BASE_Name
-pREL_ADDR    = mkPrelModule pREL_ADDR_Name
-pREL_STABLE  = mkPrelModule pREL_STABLE_Name
-pREL_IO_BASE = mkPrelModule pREL_IO_BASE_Name
-pREL_PACK    = mkPrelModule pREL_PACK_Name
-pREL_ERR     = mkPrelModule pREL_ERR_Name
-pREL_NUM     = mkPrelModule pREL_NUM_Name
-pREL_REAL    = mkPrelModule pREL_REAL_Name
-pREL_FLOAT   = mkPrelModule pREL_FLOAT_Name
+pRELUDE_Name      = mkModuleName "Prelude"
+pREL_GHC_Name     = mkModuleName "PrelGHC"        -- Primitive types and values
+pREL_BASE_Name    = mkModuleName "PrelBase"
+pREL_ENUM_Name    = mkModuleName "PrelEnum"
+pREL_SHOW_Name    = mkModuleName "PrelShow"
+pREL_READ_Name    = mkModuleName "PrelRead"
+pREL_NUM_Name     = mkModuleName "PrelNum"
+pREL_LIST_Name    = mkModuleName "PrelList"
+pREL_TUP_Name     = mkModuleName "PrelTup"
+pREL_PACK_Name    = mkModuleName "PrelPack"
+pREL_CONC_Name    = mkModuleName "PrelConc"
+pREL_IO_BASE_Name = mkModuleName "PrelIOBase"
+pREL_IO_Name     = mkModuleName "PrelIO"
+pREL_ST_Name     = mkModuleName "PrelST"
+pREL_ARR_Name     = mkModuleName "PrelArr"
+pREL_BYTEARR_Name = mkModuleName "PrelByteArr"
+pREL_FOREIGN_Name = mkModuleName "PrelForeign"
+pREL_STABLE_Name  = mkModuleName "PrelStable"
+pREL_SPLIT_Name   = mkModuleName "PrelSplit"
+pREL_ADDR_Name    = mkModuleName "PrelAddr"
+pREL_PTR_Name     = mkModuleName "PrelPtr"
+pREL_ERR_Name     = mkModuleName "PrelErr"
+pREL_REAL_Name    = mkModuleName "PrelReal"
+pREL_FLOAT_Name   = mkModuleName "PrelFloat"
+pREL_TOP_HANDLER_Name = mkModuleName "PrelTopHandler"
+
+mAIN_Name        = mkModuleName "Main"
+pREL_INT_Name    = mkModuleName "PrelInt"
+pREL_WORD_Name   = mkModuleName "PrelWord"
+
+fOREIGNOBJ_Name          = mkModuleName "ForeignObj"
+aDDR_Name        = mkModuleName "Addr"
+
+gLA_EXTS_Name   = mkModuleName "GlaExts"
+
+pREL_GHC       = mkPrelModule pREL_GHC_Name
+pREL_BASE      = mkPrelModule pREL_BASE_Name
+pREL_ADDR      = mkPrelModule pREL_ADDR_Name
+pREL_PTR       = mkPrelModule pREL_PTR_Name
+pREL_STABLE    = mkPrelModule pREL_STABLE_Name
+pREL_IO_BASE   = mkPrelModule pREL_IO_BASE_Name
+pREL_PACK      = mkPrelModule pREL_PACK_Name
+pREL_ERR       = mkPrelModule pREL_ERR_Name
+pREL_NUM       = mkPrelModule pREL_NUM_Name
+pREL_REAL      = mkPrelModule pREL_REAL_Name
+pREL_FLOAT     = mkPrelModule pREL_FLOAT_Name
+pRELUDE                = mkPrelModule pRELUDE_Name
+
+iNTERACTIVE     = mkHomeModule (mkModuleName "$Interactive")
 \end{code}
 
 %************************************************************************
@@ -287,7 +260,7 @@ pREL_FLOAT   = mkPrelModule pREL_FLOAT_Name
 %************************************************************************
 
 \begin{code}
-mkTupNameStr :: Boxity -> Int -> (ModuleName, FAST_STRING)
+mkTupNameStr :: Boxity -> Int -> (ModuleName, UserFS)
 
 mkTupNameStr Boxed 0 = (pREL_BASE_Name, SLIT("()"))
 mkTupNameStr Boxed 1 = panic "Name.mkTupNameStr: 1 ???"
@@ -305,184 +278,361 @@ mkTupNameStr Unboxed n = (pREL_GHC_Name, _PK_ ("(#" ++ nOfThem (n-1) ',' ++ "#)"
 
 mkTupConRdrName :: NameSpace -> Boxity -> Arity -> RdrName 
 mkTupConRdrName space boxity arity   = case mkTupNameStr boxity arity of
-                                         (mod, occ) -> mkPreludeQual space mod occ
+                                         (mod, occ) -> mkOrig space mod occ
 \end{code}
 
 
-
 %************************************************************************
 %*                                                                     *
-\subsection{Commonly-used RdrNames}
+\subsection{Unqualified RdrNames}
 %*                                                                     *
 %************************************************************************
 
-These RdrNames are not really "built in", but some parts of the compiler
-(notably the deriving mechanism) need to mention their names, and it's convenient
-to write them all down in one place.
-
 \begin{code}
-main_RDR               = varQual mAIN_Name      SLIT("main")
-
-ioTyCon_RDR            = tcQual   pREL_IO_BASE_Name SLIT("IO")
-ioDataCon_RDR                  = dataQual pREL_IO_BASE_Name SLIT("IO")
-bindIO_RDR             = varQual  pREL_IO_BASE_Name SLIT("bindIO")
-returnIO_RDR           = varQual  pREL_IO_BASE_Name SLIT("returnIO")
-
+main_RDR_Unqual :: RdrName
+main_RDR_Unqual = mkUnqual varName SLIT("main")
+-- Don't get a RdrName from PrelNames.mainName, because nameRdrName
+-- gets an Orig RdrName, and we want a Qual or Unqual one.  An Unqual
+-- one will do fine.
+\end{code}
 
-rationalTyCon_RDR      = tcQual   pREL_REAL_Name  SLIT("Rational")
-ratioTyCon_RDR         = tcQual   pREL_REAL_Name  SLIT("Ratio")
-ratioDataCon_RDR       = dataQual pREL_REAL_Name  SLIT(":%")
 
-byteArrayTyCon_RDR             = tcQual pREL_BYTEARR_Name  SLIT("ByteArray")
-mutableByteArrayTyCon_RDR      = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray")
+%************************************************************************
+%*                                                                     *
+\subsection{Commonly-used RdrNames}
+%*                                                                     *
+%************************************************************************
 
-foreignObjTyCon_RDR    = tcQual   pREL_IO_BASE_Name SLIT("ForeignObj")
-bcoPrimTyCon_RDR       = tcQual   pREL_BASE_Name SLIT("BCO#")
-stablePtrTyCon_RDR     = tcQual   pREL_STABLE_Name SLIT("StablePtr")
-stablePtrDataCon_RDR   = dataQual pREL_STABLE_Name SLIT("StablePtr")
-deRefStablePtr_RDR      = varQual  pREL_STABLE_Name SLIT("deRefStablePtr")
-makeStablePtr_RDR       = varQual  pREL_STABLE_Name SLIT("makeStablePtr")
+Many of these Names are not really "built in", but some parts of the
+compiler (notably the deriving mechanism) need to mention their names,
+and it's convenient to write them all down in one place.
 
--- Random PrelBase data types and constructors
-intTyCon_RDR      = tcQual   pREL_BASE_Name SLIT("Int")
-orderingTyCon_RDR  = tcQual   pREL_BASE_Name SLIT("Ordering")
-mkInt_RDR         = dataQual pREL_BASE_Name SLIT("I#")
-false_RDR         = dataQual pREL_BASE_Name SLIT("False")
-true_RDR          = dataQual pREL_BASE_Name SLIT("True")
+\begin{code}
+dollarMainName = varQual mAIN_Name SLIT("$main") dollarMainKey
+runMainName    = varQual pREL_TOP_HANDLER_Name SLIT("runMain") runMainKey
+
+-- Stuff from PrelGHC
+usOnceTyConName  = kindQual SLIT(".") usOnceTyConKey
+usManyTyConName  = kindQual SLIT("!") usManyTyConKey
+superKindName    = kindQual SLIT("KX") kindConKey
+superBoxityName  = kindQual SLIT("BX") boxityConKey
+liftedConName    = kindQual SLIT("*") liftedConKey
+unliftedConName  = kindQual SLIT("#") unliftedConKey
+openKindConName  = kindQual SLIT("?") anyBoxConKey
+usageKindConName = kindQual SLIT("$") usageConKey
+typeConName     = kindQual SLIT("Type") typeConKey
+
+funTyConName                 = tcQual  pREL_GHC_Name SLIT("(->)")  funTyConKey
+charPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Char#") charPrimTyConKey 
+intPrimTyConName             = tcQual  pREL_GHC_Name SLIT("Int#") intPrimTyConKey 
+int32PrimTyConName           = tcQual  pREL_GHC_Name SLIT("Int32#") int32PrimTyConKey 
+int64PrimTyConName           = tcQual  pREL_GHC_Name SLIT("Int64#") int64PrimTyConKey 
+wordPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Word#") wordPrimTyConKey 
+word32PrimTyConName          = tcQual  pREL_GHC_Name SLIT("Word32#") word32PrimTyConKey 
+word64PrimTyConName          = tcQual  pREL_GHC_Name SLIT("Word64#") word64PrimTyConKey 
+addrPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Addr#") addrPrimTyConKey 
+floatPrimTyConName           = tcQual  pREL_GHC_Name SLIT("Float#") floatPrimTyConKey 
+doublePrimTyConName          = tcQual  pREL_GHC_Name SLIT("Double#") doublePrimTyConKey 
+statePrimTyConName           = tcQual  pREL_GHC_Name SLIT("State#") statePrimTyConKey 
+realWorldTyConName           = tcQual  pREL_GHC_Name SLIT("RealWorld") realWorldTyConKey 
+arrayPrimTyConName           = tcQual  pREL_GHC_Name SLIT("Array#") arrayPrimTyConKey 
+byteArrayPrimTyConName       = tcQual  pREL_GHC_Name SLIT("ByteArray#") byteArrayPrimTyConKey 
+mutableArrayPrimTyConName     = tcQual  pREL_GHC_Name SLIT("MutableArray#") mutableArrayPrimTyConKey 
+mutableByteArrayPrimTyConName = tcQual  pREL_GHC_Name SLIT("MutableByteArray#") mutableByteArrayPrimTyConKey 
+mutVarPrimTyConName          = tcQual  pREL_GHC_Name SLIT("MutVar#") mutVarPrimTyConKey 
+mVarPrimTyConName            = tcQual  pREL_GHC_Name SLIT("MVar#") mVarPrimTyConKey 
+stablePtrPrimTyConName        = tcQual  pREL_GHC_Name SLIT("StablePtr#") stablePtrPrimTyConKey 
+stableNamePrimTyConName       = tcQual  pREL_GHC_Name SLIT("StableName#") stableNamePrimTyConKey 
+foreignObjPrimTyConName       = tcQual  pREL_GHC_Name SLIT("ForeignObj#") foreignObjPrimTyConKey 
+bcoPrimTyConName             = tcQual  pREL_GHC_Name SLIT("BCO#") bcoPrimTyConKey 
+weakPrimTyConName            = tcQual  pREL_GHC_Name SLIT("Weak#") weakPrimTyConKey 
+threadIdPrimTyConName                = tcQual  pREL_GHC_Name SLIT("ThreadId#") threadIdPrimTyConKey 
+cCallableClassName           = clsQual pREL_GHC_Name SLIT("CCallable") cCallableClassKey
+cReturnableClassName         = clsQual pREL_GHC_Name SLIT("CReturnable") cReturnableClassKey
+
+-- PrelBase data types and constructors
+charTyConName    = tcQual   pREL_BASE_Name SLIT("Char") charTyConKey
+charDataConName   = dataQual pREL_BASE_Name SLIT("C#") charDataConKey
+intTyConName     = tcQual   pREL_BASE_Name SLIT("Int") intTyConKey
+intDataConName   = dataQual pREL_BASE_Name SLIT("I#") intDataConKey
+orderingTyConName = tcQual   pREL_BASE_Name SLIT("Ordering") orderingTyConKey
+boolTyConName    = tcQual   pREL_BASE_Name SLIT("Bool") boolTyConKey
+falseDataConName  = dataQual pREL_BASE_Name SLIT("False") falseDataConKey
+trueDataConName          = dataQual pREL_BASE_Name SLIT("True") trueDataConKey
+listTyConName    = tcQual   pREL_BASE_Name SLIT("[]") listTyConKey
+nilDataConName           = dataQual pREL_BASE_Name SLIT("[]") nilDataConKey
+consDataConName          = dataQual pREL_BASE_Name SLIT(":") consDataConKey
+
+-- PrelTup
+fstIdName        = varQual pREL_TUP_Name SLIT("fst") fstIdKey
+sndIdName        = varQual pREL_TUP_Name SLIT("snd") sndIdKey
+
+-- Generics
+crossTyConName     = tcQual   pREL_BASE_Name SLIT(":*:") crossTyConKey
+crossDataConName   = dataQual pREL_BASE_Name SLIT(":*:") crossDataConKey
+plusTyConName      = tcQual   pREL_BASE_Name SLIT(":+:") plusTyConKey
+inlDataConName     = dataQual pREL_BASE_Name SLIT("Inl") inlDataConKey
+inrDataConName     = dataQual pREL_BASE_Name SLIT("Inr") inrDataConKey
+genUnitTyConName   = tcQual   pREL_BASE_Name SLIT("Unit") genUnitTyConKey
+genUnitDataConName = dataQual pREL_BASE_Name SLIT("Unit") genUnitDataConKey
 
 -- Random PrelBase functions
-otherwiseId_RDR    = varQual pREL_BASE_Name SLIT("otherwise")
-and_RDR                   = varQual pREL_BASE_Name SLIT("&&")
-not_RDR                   = varQual pREL_BASE_Name SLIT("not")
-compose_RDR       = varQual pREL_BASE_Name SLIT(".")
-append_RDR        = varQual pREL_BASE_Name SLIT("++")
-foldr_RDR         = varQual pREL_BASE_Name SLIT("foldr")
-map_RDR                   = varQual pREL_BASE_Name SLIT("map")
-build_RDR         = varQual pREL_BASE_Name SLIT("build")
-augment_RDR       = varQual pREL_BASE_Name SLIT("augment")
-eqString_RDR      = varQual pREL_BASE_Name SLIT("eqString")
+unsafeCoerceName  = varQual pREL_BASE_Name SLIT("unsafeCoerce") unsafeCoerceIdKey
+otherwiseIdName   = varQual pREL_BASE_Name SLIT("otherwise") otherwiseIdKey
+appendName       = varQual pREL_BASE_Name SLIT("++") appendIdKey
+foldrName        = varQual pREL_BASE_Name SLIT("foldr") foldrIdKey
+mapName                  = varQual pREL_BASE_Name SLIT("map") mapIdKey
+buildName        = varQual pREL_BASE_Name SLIT("build") buildIdKey
+augmentName      = varQual pREL_BASE_Name SLIT("augment") augmentIdKey
+eqStringName     = varQual pREL_BASE_Name SLIT("eqString") eqStringIdKey
 
 -- Strings
-unpackCString_RDR       = varQual pREL_BASE_Name SLIT("unpackCString#")
-unpackCStringAppend_RDR = varQual pREL_BASE_Name SLIT("unpackAppendCString#")
-unpackCStringFoldr_RDR  = varQual pREL_BASE_Name SLIT("unpackFoldrCString#")
-unpackCStringUtf8_RDR   = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#")
+unpackCStringName       = varQual pREL_BASE_Name SLIT("unpackCString#") unpackCStringIdKey
+unpackCStringAppendName = varQual pREL_BASE_Name SLIT("unpackAppendCString#") unpackCStringAppendIdKey
+unpackCStringFoldrName  = varQual pREL_BASE_Name SLIT("unpackFoldrCString#") unpackCStringFoldrIdKey
+unpackCStringUtf8Name   = varQual pREL_BASE_Name SLIT("unpackCStringUtf8#") unpackCStringUtf8IdKey
 
 -- Classes Eq and Ord
-eqClass_RDR            = clsQual pREL_BASE_Name SLIT("Eq")
-ordClass_RDR           = clsQual pREL_BASE_Name SLIT("Ord")
-eq_RDR            = varQual pREL_BASE_Name SLIT("==")
-ne_RDR            = varQual pREL_BASE_Name SLIT("/=")
-le_RDR            = varQual pREL_BASE_Name SLIT("<=")
-lt_RDR            = varQual pREL_BASE_Name SLIT("<")
-ge_RDR            = varQual pREL_BASE_Name SLIT(">=")
-gt_RDR            = varQual pREL_BASE_Name SLIT(">")
-ltTag_RDR         = dataQual pREL_BASE_Name SLIT("LT")
-eqTag_RDR         = dataQual pREL_BASE_Name SLIT("EQ")
-gtTag_RDR         = dataQual pREL_BASE_Name SLIT("GT")
-max_RDR                   = varQual pREL_BASE_Name SLIT("max")
-min_RDR                   = varQual pREL_BASE_Name SLIT("min")
-compare_RDR       = varQual pREL_BASE_Name SLIT("compare")
+eqClassName      = clsQual pREL_BASE_Name SLIT("Eq") eqClassKey
+ordClassName     = clsQual pREL_BASE_Name SLIT("Ord") ordClassKey
+eqName           = varQual  pREL_BASE_Name SLIT("==") eqClassOpKey
+geName           = varQual  pREL_BASE_Name SLIT(">=") geClassOpKey
 
 -- Class Monad
-monadClass_RDR    = clsQual pREL_BASE_Name SLIT("Monad")
-monadPlusClass_RDR = clsQual pREL_BASE_Name SLIT("MonadPlus")
-thenM_RDR         = varQual pREL_BASE_Name SLIT(">>=")
-returnM_RDR       = varQual pREL_BASE_Name SLIT("return")
-failM_RDR         = varQual pREL_BASE_Name SLIT("fail")
+monadClassName    = clsQual pREL_BASE_Name SLIT("Monad") monadClassKey
+monadPlusClassName = clsQual pREL_BASE_Name SLIT("MonadPlus") monadPlusClassKey
+thenMName         = varQual pREL_BASE_Name SLIT(">>=") thenMClassOpKey
+returnMName       = varQual pREL_BASE_Name SLIT("return") returnMClassOpKey
+failMName         = varQual pREL_BASE_Name SLIT("fail") failMClassOpKey
 
 -- Class Functor
-functorClass_RDR       = clsQual pREL_BASE_Name SLIT("Functor")
+functorClassName  = clsQual pREL_BASE_Name SLIT("Functor") functorClassKey
 
 -- Class Show
-showClass_RDR     = clsQual pREL_SHOW_Name SLIT("Show")
-showList___RDR     = varQual pREL_SHOW_Name SLIT("showList__")
-showsPrec_RDR     = varQual pREL_SHOW_Name SLIT("showsPrec")
-showList_RDR      = varQual pREL_SHOW_Name SLIT("showList")
-showSpace_RDR     = varQual pREL_SHOW_Name SLIT("showSpace")
-showString_RDR    = varQual pREL_SHOW_Name SLIT("showString")
-showParen_RDR     = varQual pREL_SHOW_Name SLIT("showParen")
-
+showClassName    = clsQual pREL_SHOW_Name SLIT("Show") showClassKey
 
 -- Class Read
-readClass_RDR     = clsQual pREL_READ_Name SLIT("Read")
-readsPrec_RDR     = varQual pREL_READ_Name SLIT("readsPrec")
-readList_RDR      = varQual pREL_READ_Name SLIT("readList")
-readParen_RDR     = varQual pREL_READ_Name SLIT("readParen")
-lex_RDR                   = varQual pREL_READ_Name SLIT("lex")
-readList___RDR     = varQual pREL_READ_Name SLIT("readList__")
-
-
--- Class Num
-numClass_RDR      = clsQual pREL_NUM_Name SLIT("Num")
-fromInt_RDR       = varQual pREL_NUM_Name SLIT("fromInt")
-fromInteger_RDR           = varQual pREL_NUM_Name SLIT("fromInteger")
-minus_RDR         = varQual pREL_NUM_Name SLIT("-")
-negate_RDR        = varQual pREL_NUM_Name SLIT("negate")
-plus_RDR          = varQual pREL_NUM_Name SLIT("+")
-times_RDR         = varQual pREL_NUM_Name SLIT("*")
-plusInteger_RDR           = varQual pREL_NUM_Name SLIT("plusInteger")
-timesInteger_RDR   = varQual pREL_NUM_Name SLIT("timesInteger")
-
--- Other numberic classes
-realClass_RDR          = clsQual pREL_REAL_Name  SLIT("Real")
-integralClass_RDR      = clsQual pREL_REAL_Name  SLIT("Integral")
-realFracClass_RDR      = clsQual pREL_REAL_Name  SLIT("RealFrac")
-fractionalClass_RDR    = clsQual pREL_REAL_Name  SLIT("Fractional")
-fromRational_RDR       = varQual pREL_REAL_Name  SLIT("fromRational")
-
-floatingClass_RDR      = clsQual pREL_FLOAT_Name  SLIT("Floating")
-realFloatClass_RDR     = clsQual pREL_FLOAT_Name  SLIT("RealFloat")
+readClassName    = clsQual pREL_READ_Name SLIT("Read") readClassKey
+
+-- Module PrelNum
+numClassName     = clsQual pREL_NUM_Name SLIT("Num") numClassKey
+fromIntegerName   = varQual pREL_NUM_Name SLIT("fromInteger") fromIntegerClassOpKey
+minusName        = varQual pREL_NUM_Name SLIT("-") minusClassOpKey
+negateName       = varQual pREL_NUM_Name SLIT("negate") negateClassOpKey
+plusIntegerName   = varQual pREL_NUM_Name SLIT("plusInteger") plusIntegerIdKey
+timesIntegerName  = varQual pREL_NUM_Name SLIT("timesInteger") timesIntegerIdKey
+integerTyConName  = tcQual  pREL_NUM_Name SLIT("Integer") integerTyConKey
+smallIntegerDataConName = dataQual pREL_NUM_Name SLIT("S#") smallIntegerDataConKey
+largeIntegerDataConName = dataQual pREL_NUM_Name SLIT("J#") largeIntegerDataConKey
+
+-- PrelReal types and classes
+rationalTyConName   = tcQual   pREL_REAL_Name  SLIT("Rational") rationalTyConKey
+ratioTyConName     = tcQual   pREL_REAL_Name  SLIT("Ratio") ratioTyConKey
+ratioDataConName    = dataQual pREL_REAL_Name  SLIT(":%") ratioDataConKey
+realClassName      = clsQual  pREL_REAL_Name  SLIT("Real") realClassKey
+integralClassName   = clsQual  pREL_REAL_Name  SLIT("Integral") integralClassKey
+realFracClassName   = clsQual  pREL_REAL_Name  SLIT("RealFrac") realFracClassKey
+fractionalClassName = clsQual  pREL_REAL_Name  SLIT("Fractional") fractionalClassKey
+fromRationalName    = varQual  pREL_REAL_Name  SLIT("fromRational") fromRationalClassOpKey
+
+-- PrelFloat classes
+floatTyConName    = tcQual   pREL_FLOAT_Name SLIT("Float") floatTyConKey
+floatDataConName   = dataQual pREL_FLOAT_Name SLIT("F#") floatDataConKey
+doubleTyConName    = tcQual   pREL_FLOAT_Name SLIT("Double") doubleTyConKey
+doubleDataConName  = dataQual pREL_FLOAT_Name SLIT("D#") doubleDataConKey
+floatingClassName  = clsQual  pREL_FLOAT_Name SLIT("Floating") floatingClassKey
+realFloatClassName = clsQual  pREL_FLOAT_Name SLIT("RealFloat") realFloatClassKey
 
 -- Class Ix
-ixClass_RDR       = clsQual pREL_ARR_Name SLIT("Ix")
-range_RDR         = varQual pREL_ARR_Name SLIT("range")
-index_RDR         = varQual pREL_ARR_Name SLIT("index")
-inRange_RDR       = varQual pREL_ARR_Name SLIT("inRange")
-
--- Class CCallable and CReturnable
-ccallableClass_RDR     = clsQual pREL_GHC_Name  SLIT("CCallable")
-creturnableClass_RDR   = clsQual pREL_GHC_Name  SLIT("CReturnable")
+ixClassName       = clsQual pREL_ARR_Name SLIT("Ix") ixClassKey
 
 -- Class Enum
-enumClass_RDR     = clsQual pREL_ENUM_Name SLIT("Enum")
-succ_RDR          = varQual pREL_ENUM_Name SLIT("succ")
-pred_RDR          = varQual pREL_ENUM_Name SLIT("pred")
-toEnum_RDR        = varQual pREL_ENUM_Name SLIT("toEnum")
-fromEnum_RDR      = varQual pREL_ENUM_Name SLIT("fromEnum")
-enumFrom_RDR      = varQual pREL_ENUM_Name SLIT("enumFrom")
-enumFromTo_RDR    = varQual pREL_ENUM_Name SLIT("enumFromTo")
-enumFromThen_RDR   = varQual pREL_ENUM_Name SLIT("enumFromThen")
-enumFromThenTo_RDR = varQual pREL_ENUM_Name SLIT("enumFromThenTo")
+enumClassName     = clsQual pREL_ENUM_Name SLIT("Enum") enumClassKey
+toEnumName        = varQual pREL_ENUM_Name SLIT("toEnum") toEnumClassOpKey
+fromEnumName      = varQual pREL_ENUM_Name SLIT("fromEnum") fromEnumClassOpKey
+enumFromName      = varQual pREL_ENUM_Name SLIT("enumFrom") enumFromClassOpKey
+enumFromToName    = varQual pREL_ENUM_Name SLIT("enumFromTo") enumFromToClassOpKey
+enumFromThenName   = varQual pREL_ENUM_Name SLIT("enumFromThen") enumFromThenClassOpKey
+enumFromThenToName = varQual pREL_ENUM_Name SLIT("enumFromThenTo") enumFromThenToClassOpKey
 
 -- Class Bounded
-boundedClass_RDR   = clsQual pREL_ENUM_Name SLIT("Bounded")
-minBound_RDR      = varQual pREL_ENUM_Name SLIT("minBound")
-maxBound_RDR      = varQual pREL_ENUM_Name SLIT("maxBound")
-
+boundedClassName  = clsQual pREL_ENUM_Name SLIT("Bounded") boundedClassKey
 
 -- List functions
-concat_RDR        = varQual pREL_LIST_Name SLIT("concat")
-filter_RDR        = varQual pREL_LIST_Name SLIT("filter")
-zip_RDR                   = varQual pREL_LIST_Name SLIT("zip")
-
-int8TyCon_RDR    = tcQual iNT_Name       SLIT("Int8")
-int16TyCon_RDR   = tcQual iNT_Name       SLIT("Int16")
-int32TyCon_RDR   = tcQual iNT_Name       SLIT("Int32")
-int64TyCon_RDR   = tcQual pREL_ADDR_Name SLIT("Int64")
-
-word8TyCon_RDR    = tcQual wORD_Name      SLIT("Word8")
-word16TyCon_RDR   = tcQual wORD_Name      SLIT("Word16")
-word32TyCon_RDR   = tcQual wORD_Name      SLIT("Word32")
-word64TyCon_RDR   = tcQual pREL_ADDR_Name SLIT("Word64")
-
-error_RDR         = varQual pREL_ERR_Name SLIT("error")
-assert_RDR         = varQual pREL_GHC_Name SLIT("assert")
-getTag_RDR        = varQual pREL_GHC_Name SLIT("getTag#")
-assertErr_RDR      = varQual pREL_ERR_Name SLIT("assertError")
-runSTRep_RDR      = varQual pREL_ST_Name  SLIT("runSTRep")
+concatName       = varQual pREL_LIST_Name SLIT("concat") concatIdKey
+filterName       = varQual pREL_LIST_Name SLIT("filter") filterIdKey
+zipName                  = varQual pREL_LIST_Name SLIT("zip") zipIdKey
+
+-- IOBase things
+ioTyConName      = tcQual   pREL_IO_BASE_Name SLIT("IO") ioTyConKey
+ioDataConName     = dataQual pREL_IO_BASE_Name SLIT("IO") ioDataConKey
+bindIOName       = varQual  pREL_IO_BASE_Name SLIT("bindIO") bindIOIdKey
+returnIOName     = varQual  pREL_IO_BASE_Name SLIT("returnIO") returnIOIdKey
+failIOName       = varQual  pREL_IO_BASE_Name SLIT("failIO") failIOIdKey
+
+-- IO things
+printName        = varQual pREL_IO_Name SLIT("print") printIdKey
+
+-- Int, Word, and Addr things
+int8TyConName     = tcQual pREL_INT_Name  SLIT("Int8") int8TyConKey
+int16TyConName    = tcQual pREL_INT_Name  SLIT("Int16") int16TyConKey
+int32TyConName    = tcQual pREL_INT_Name  SLIT("Int32") int32TyConKey
+int64TyConName    = tcQual pREL_INT_Name  SLIT("Int64") int64TyConKey
+
+word8TyConName    = tcQual pREL_WORD_Name SLIT("Word8")  word8TyConKey
+word16TyConName   = tcQual pREL_WORD_Name SLIT("Word16") word16TyConKey
+word32TyConName   = tcQual pREL_WORD_Name SLIT("Word32") word32TyConKey
+word64TyConName   = tcQual pREL_WORD_Name SLIT("Word64") word64TyConKey
+
+wordTyConName     = tcQual   pREL_WORD_Name SLIT("Word")   wordTyConKey
+wordDataConName   = dataQual pREL_WORD_Name SLIT("W#")     wordDataConKey
+
+addrTyConName    = tcQual   aDDR_Name SLIT("Addr") addrTyConKey
+addrDataConName   = dataQual aDDR_Name SLIT("A#") addrDataConKey
+
+ptrTyConName     = tcQual   pREL_PTR_Name SLIT("Ptr") ptrTyConKey
+ptrDataConName    = dataQual pREL_PTR_Name SLIT("Ptr") ptrDataConKey
+
+funPtrTyConName          = tcQual   pREL_PTR_Name SLIT("FunPtr") funPtrTyConKey
+funPtrDataConName = dataQual pREL_PTR_Name SLIT("FunPtr") funPtrDataConKey
+
+-- Byte array types
+byteArrayTyConName       = tcQual pREL_BYTEARR_Name  SLIT("ByteArray") byteArrayTyConKey
+mutableByteArrayTyConName = tcQual pREL_BYTEARR_Name  SLIT("MutableByteArray") mutableByteArrayTyConKey
+
+-- Forign objects and weak pointers
+foreignObjTyConName   = tcQual   fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjTyConKey
+foreignObjDataConName = dataQual fOREIGNOBJ_Name SLIT("ForeignObj") foreignObjDataConKey
+foreignPtrTyConName   = tcQual   pREL_FOREIGN_Name SLIT("ForeignPtr") foreignPtrTyConKey
+foreignPtrDataConName = dataQual pREL_FOREIGN_Name SLIT("ForeignPtr") foreignPtrDataConKey
+stablePtrTyConName    = tcQual   pREL_STABLE_Name SLIT("StablePtr") stablePtrTyConKey
+stablePtrDataConName  = dataQual pREL_STABLE_Name SLIT("StablePtr") stablePtrDataConKey
+deRefStablePtrName    = varQual  pREL_STABLE_Name SLIT("deRefStablePtr") deRefStablePtrIdKey
+newStablePtrName      = varQual  pREL_STABLE_Name SLIT("newStablePtr") newStablePtrIdKey
+
+errorName         = varQual pREL_ERR_Name SLIT("error") errorIdKey
+assertName         = varQual pREL_GHC_Name SLIT("assert") assertIdKey
+getTagName        = varQual pREL_GHC_Name SLIT("getTag#") getTagIdKey
+runSTRepName      = varQual pREL_ST_Name  SLIT("runSTRep") runSTRepIdKey
+
+-- The "split" Id for splittable implicit parameters
+splitIdName = varQual pREL_SPLIT_Name SLIT("split") splitIdKey
 \end{code}
 
+%************************************************************************
+%*                                                                     *
+\subsection{Known names}
+%*                                                                     *
+%************************************************************************
+
+The following names are known to the compiler, but they don't require
+pre-assigned keys.  Mostly these names are used in generating deriving
+code, which is passed through the renamer anyway.
+
+       THEY ARE ALL ORIGINAL NAMES, HOWEVER
+
+\begin{code}
+-- Lists and tuples
+tupleCon_RDR, tupleTyCon_RDR           :: Int -> RdrName
+ubxTupleCon_RDR, ubxTupleTyCon_RDR     :: Int -> RdrName
+
+tupleCon_RDR      = mkTupConRdrName dataName Boxed  
+tupleTyCon_RDR    = mkTupConRdrName tcName   Boxed  
+ubxTupleCon_RDR   = mkTupConRdrName dataName Unboxed
+ubxTupleTyCon_RDR = mkTupConRdrName tcName   Unboxed
+
+unitCon_RDR      = dataQual_RDR pREL_BASE_Name SLIT("()")
+unitTyCon_RDR    = tcQual_RDR   pREL_BASE_Name SLIT("()")
+
+and_RDR                   = varQual_RDR  pREL_BASE_Name SLIT("&&")
+not_RDR                   = varQual_RDR  pREL_BASE_Name SLIT("not")
+compose_RDR       = varQual_RDR  pREL_BASE_Name SLIT(".")
+ne_RDR            = varQual_RDR  pREL_BASE_Name SLIT("/=")
+le_RDR            = varQual_RDR  pREL_BASE_Name SLIT("<=")
+lt_RDR            = varQual_RDR  pREL_BASE_Name SLIT("<")
+gt_RDR            = varQual_RDR  pREL_BASE_Name SLIT(">")
+ltTag_RDR                 = dataQual_RDR pREL_BASE_Name SLIT("LT")
+eqTag_RDR                 = dataQual_RDR pREL_BASE_Name SLIT("EQ")
+gtTag_RDR                 = dataQual_RDR pREL_BASE_Name SLIT("GT")
+max_RDR                   = varQual_RDR  pREL_BASE_Name SLIT("max")
+min_RDR                   = varQual_RDR  pREL_BASE_Name SLIT("min")
+compare_RDR       = varQual_RDR  pREL_BASE_Name SLIT("compare")
+showList_RDR      = varQual_RDR  pREL_SHOW_Name SLIT("showList")
+showList___RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showList__")
+showsPrec_RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showsPrec")
+showSpace_RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showSpace")
+showString_RDR    = varQual_RDR  pREL_SHOW_Name SLIT("showString")
+showParen_RDR     = varQual_RDR  pREL_SHOW_Name SLIT("showParen")
+readsPrec_RDR     = varQual_RDR  pREL_READ_Name SLIT("readsPrec")
+readList_RDR      = varQual_RDR  pREL_READ_Name SLIT("readList")
+readParen_RDR     = varQual_RDR  pREL_READ_Name SLIT("readParen")
+lex_RDR                   = varQual_RDR  pREL_READ_Name SLIT("lex")
+readList___RDR     = varQual_RDR  pREL_READ_Name SLIT("readList__")
+times_RDR         = varQual_RDR  pREL_NUM_Name SLIT("*")
+plus_RDR          = varQual_RDR  pREL_NUM_Name SLIT("+")
+negate_RDR        = varQual_RDR  pREL_NUM_Name SLIT("negate")
+range_RDR         = varQual_RDR  pREL_ARR_Name SLIT("range")
+index_RDR         = varQual_RDR  pREL_ARR_Name SLIT("index")
+inRange_RDR       = varQual_RDR  pREL_ARR_Name SLIT("inRange")
+succ_RDR          = varQual_RDR  pREL_ENUM_Name SLIT("succ")
+pred_RDR          = varQual_RDR  pREL_ENUM_Name SLIT("pred")
+minBound_RDR      = varQual_RDR  pREL_ENUM_Name SLIT("minBound")
+maxBound_RDR      = varQual_RDR  pREL_ENUM_Name SLIT("maxBound")
+assertErr_RDR      = varQual_RDR  pREL_ERR_Name SLIT("assertError")
+\end{code}
+
+These RDR names also have known keys, so we need to get back the RDR names to
+populate the occurrence list above.
+
+\begin{code}
+funTyCon_RDR           = nameRdrName funTyConName
+nilCon_RDR             = nameRdrName nilDataConName
+listTyCon_RDR          = nameRdrName listTyConName
+ioTyCon_RDR            = nameRdrName ioTyConName
+intTyCon_RDR           = nameRdrName intTyConName
+eq_RDR                         = nameRdrName eqName
+ge_RDR                         = nameRdrName geName
+numClass_RDR           = nameRdrName numClassName
+ordClass_RDR           = nameRdrName ordClassName
+map_RDR                = nameRdrName mapName
+append_RDR             = nameRdrName appendName
+foldr_RDR              = nameRdrName foldrName
+build_RDR              = nameRdrName buildName
+enumFromTo_RDR                 = nameRdrName enumFromToName
+returnM_RDR            = nameRdrName returnMName
+thenM_RDR              = nameRdrName thenMName
+failM_RDR              = nameRdrName failMName
+false_RDR              = nameRdrName falseDataConName
+true_RDR               = nameRdrName trueDataConName
+error_RDR              = nameRdrName errorName
+getTag_RDR             = nameRdrName getTagName
+fromEnum_RDR           = nameRdrName fromEnumName
+toEnum_RDR             = nameRdrName toEnumName
+enumFrom_RDR           = nameRdrName enumFromName
+mkInt_RDR              = nameRdrName intDataConName
+enumFromThen_RDR       = nameRdrName enumFromThenName
+enumFromThenTo_RDR     = nameRdrName enumFromThenToName
+ratioDataCon_RDR       = nameRdrName ratioDataConName
+plusInteger_RDR                = nameRdrName plusIntegerName
+timesInteger_RDR       = nameRdrName timesIntegerName
+enumClass_RDR          = nameRdrName enumClassName
+monadClass_RDR         = nameRdrName monadClassName
+ioDataCon_RDR          = nameRdrName ioDataConName
+cCallableClass_RDR     = nameRdrName cCallableClassName
+cReturnableClass_RDR   = nameRdrName cReturnableClassName
+eqClass_RDR            = nameRdrName eqClassName
+eqString_RDR           = nameRdrName eqStringName
+unpackCString_RDR              = nameRdrName unpackCStringName
+unpackCStringFoldr_RDR         = nameRdrName unpackCStringFoldrName
+unpackCStringUtf8_RDR          = nameRdrName unpackCStringUtf8Name
+deRefStablePtr_RDR     = nameRdrName deRefStablePtrName
+newStablePtr_RDR       = nameRdrName newStablePtrName
+bindIO_RDR             = nameRdrName bindIOName
+returnIO_RDR           = nameRdrName returnIOName
+fromInteger_RDR                = nameRdrName fromIntegerName
+fromRational_RDR       = nameRdrName fromRationalName
+minus_RDR              = nameRdrName minusName
+\end{code}
 
 %************************************************************************
 %*                                                                     *
@@ -490,14 +640,25 @@ runSTRep_RDR         = varQual pREL_ST_Name  SLIT("runSTRep")
 %*                                                                     *
 %************************************************************************
 
+All these are original names; hence mkOrig
+
 \begin{code}
-varQual  = mkPreludeQual varName
-dataQual = mkPreludeQual dataName
-tcQual   = mkPreludeQual tcName
-clsQual  = mkPreludeQual clsName
+varQual  mod str uq = mkKnownKeyGlobal (varQual_RDR  mod str) uq
+dataQual mod str uq = mkKnownKeyGlobal (dataQual_RDR mod str) uq
+tcQual   mod str uq = mkKnownKeyGlobal (tcQual_RDR   mod str) uq
+clsQual  mod str uq = mkKnownKeyGlobal (clsQual_RDR  mod str) uq
+
+kindQual str uq = mkLocalName uq (mkKindOccFS tcName str) builtinSrcLoc
+       -- Kinds are not z-encoded in interface file, hence mkKindOccFS
+       -- And they don't come from any particular module; indeed we always
+       -- want to print them unqualified.  Hence the LocalName
+
+varQual_RDR  mod str = mkOrig varName  mod str
+tcQual_RDR   mod str = mkOrig tcName   mod str
+clsQual_RDR  mod str = mkOrig clsName  mod str
+dataQual_RDR mod str = mkOrig dataName mod str
 \end{code}
 
-
 %************************************************************************
 %*                                                                     *
 \subsubsection[Uniques-prelude-Classes]{@Uniques@ for wired-in @Classes@}
@@ -551,45 +712,62 @@ intPrimTyConKey                           = mkPreludeTyConUnique 14
 intTyConKey                            = mkPreludeTyConUnique 15
 int8TyConKey                           = mkPreludeTyConUnique 16
 int16TyConKey                          = mkPreludeTyConUnique 17
-int32TyConKey                          = mkPreludeTyConUnique 18
-int64PrimTyConKey                      = mkPreludeTyConUnique 19
-int64TyConKey                          = mkPreludeTyConUnique 20
-integerTyConKey                                = mkPreludeTyConUnique 21
-listTyConKey                           = mkPreludeTyConUnique 22
-foreignObjPrimTyConKey                 = mkPreludeTyConUnique 23
-foreignObjTyConKey                     = mkPreludeTyConUnique 24
-weakPrimTyConKey                       = mkPreludeTyConUnique 25
-mutableArrayPrimTyConKey               = mkPreludeTyConUnique 26
-mutableByteArrayPrimTyConKey           = mkPreludeTyConUnique 27
-orderingTyConKey                       = mkPreludeTyConUnique 28
-mVarPrimTyConKey                       = mkPreludeTyConUnique 29
-ratioTyConKey                          = mkPreludeTyConUnique 30
-rationalTyConKey                       = mkPreludeTyConUnique 31
-realWorldTyConKey                      = mkPreludeTyConUnique 32
-stablePtrPrimTyConKey                  = mkPreludeTyConUnique 33
-stablePtrTyConKey                      = mkPreludeTyConUnique 34
-statePrimTyConKey                      = mkPreludeTyConUnique 35
-stableNamePrimTyConKey                 = mkPreludeTyConUnique 50
-stableNameTyConKey                     = mkPreludeTyConUnique 51
-mutableByteArrayTyConKey               = mkPreludeTyConUnique 52
-mutVarPrimTyConKey                     = mkPreludeTyConUnique 53
-ioTyConKey                             = mkPreludeTyConUnique 55
-byteArrayTyConKey                      = mkPreludeTyConUnique 56
-wordPrimTyConKey                       = mkPreludeTyConUnique 57
-wordTyConKey                           = mkPreludeTyConUnique 58
-word8TyConKey                          = mkPreludeTyConUnique 59
-word16TyConKey                         = mkPreludeTyConUnique 60
-word32TyConKey                         = mkPreludeTyConUnique 61
-word64PrimTyConKey                     = mkPreludeTyConUnique 62
-word64TyConKey                         = mkPreludeTyConUnique 63
-boxedConKey                            = mkPreludeTyConUnique 64
-unboxedConKey                          = mkPreludeTyConUnique 65
-anyBoxConKey                           = mkPreludeTyConUnique 66
-kindConKey                             = mkPreludeTyConUnique 67
-boxityConKey                           = mkPreludeTyConUnique 68
-typeConKey                             = mkPreludeTyConUnique 69
-threadIdPrimTyConKey                   = mkPreludeTyConUnique 70
-bcoPrimTyConKey                                = mkPreludeTyConUnique 71
+int32PrimTyConKey                      = mkPreludeTyConUnique 18
+int32TyConKey                          = mkPreludeTyConUnique 19
+int64PrimTyConKey                      = mkPreludeTyConUnique 20
+int64TyConKey                          = mkPreludeTyConUnique 21
+integerTyConKey                                = mkPreludeTyConUnique 22
+listTyConKey                           = mkPreludeTyConUnique 23
+foreignObjPrimTyConKey                 = mkPreludeTyConUnique 24
+foreignObjTyConKey                     = mkPreludeTyConUnique 25
+foreignPtrTyConKey                     = mkPreludeTyConUnique 26
+weakPrimTyConKey                       = mkPreludeTyConUnique 27
+mutableArrayPrimTyConKey               = mkPreludeTyConUnique 28
+mutableByteArrayPrimTyConKey           = mkPreludeTyConUnique 29
+orderingTyConKey                       = mkPreludeTyConUnique 30
+mVarPrimTyConKey                       = mkPreludeTyConUnique 31
+ratioTyConKey                          = mkPreludeTyConUnique 32
+rationalTyConKey                       = mkPreludeTyConUnique 33
+realWorldTyConKey                      = mkPreludeTyConUnique 34
+stablePtrPrimTyConKey                  = mkPreludeTyConUnique 35
+stablePtrTyConKey                      = mkPreludeTyConUnique 36
+statePrimTyConKey                      = mkPreludeTyConUnique 50
+stableNamePrimTyConKey                 = mkPreludeTyConUnique 51
+stableNameTyConKey                     = mkPreludeTyConUnique 52
+mutableByteArrayTyConKey               = mkPreludeTyConUnique 53
+mutVarPrimTyConKey                     = mkPreludeTyConUnique 55
+ioTyConKey                             = mkPreludeTyConUnique 56
+byteArrayTyConKey                      = mkPreludeTyConUnique 57
+wordPrimTyConKey                       = mkPreludeTyConUnique 58
+wordTyConKey                           = mkPreludeTyConUnique 59
+word8TyConKey                          = mkPreludeTyConUnique 60
+word16TyConKey                         = mkPreludeTyConUnique 61 
+word32PrimTyConKey                     = mkPreludeTyConUnique 62 
+word32TyConKey                         = mkPreludeTyConUnique 63
+word64PrimTyConKey                     = mkPreludeTyConUnique 64
+word64TyConKey                         = mkPreludeTyConUnique 65
+liftedConKey                           = mkPreludeTyConUnique 66
+unliftedConKey                         = mkPreludeTyConUnique 67
+anyBoxConKey                           = mkPreludeTyConUnique 68
+kindConKey                             = mkPreludeTyConUnique 69
+boxityConKey                           = mkPreludeTyConUnique 70
+typeConKey                             = mkPreludeTyConUnique 71
+threadIdPrimTyConKey                   = mkPreludeTyConUnique 72
+bcoPrimTyConKey                                = mkPreludeTyConUnique 73
+ptrTyConKey                            = mkPreludeTyConUnique 74
+funPtrTyConKey                         = mkPreludeTyConUnique 75
+
+-- Usage type constructors
+usageConKey                            = mkPreludeTyConUnique 76
+usOnceTyConKey                         = mkPreludeTyConUnique 77
+usManyTyConKey                         = mkPreludeTyConUnique 78
+
+-- Generic Type Constructors
+crossTyConKey                          = mkPreludeTyConUnique 79
+plusTyConKey                           = mkPreludeTyConUnique 80
+genUnitTyConKey                                = mkPreludeTyConUnique 81
+
+unitTyConKey = mkTupleTyConUnique Boxed 0
 \end{code}
 
 %************************************************************************
@@ -609,13 +787,22 @@ intDataConKey                             = mkPreludeDataConUnique  6
 smallIntegerDataConKey                 = mkPreludeDataConUnique  7
 largeIntegerDataConKey                 = mkPreludeDataConUnique  8
 foreignObjDataConKey                   = mkPreludeDataConUnique  9
-nilDataConKey                          = mkPreludeDataConUnique 10
-ratioDataConKey                                = mkPreludeDataConUnique 11
-stablePtrDataConKey                    = mkPreludeDataConUnique 12
-stableNameDataConKey                   = mkPreludeDataConUnique 13
-trueDataConKey                         = mkPreludeDataConUnique 14
-wordDataConKey                         = mkPreludeDataConUnique 15
-ioDataConKey                           = mkPreludeDataConUnique 16
+foreignPtrDataConKey                   = mkPreludeDataConUnique 10
+nilDataConKey                          = mkPreludeDataConUnique 11
+ratioDataConKey                                = mkPreludeDataConUnique 12
+stablePtrDataConKey                    = mkPreludeDataConUnique 13
+stableNameDataConKey                   = mkPreludeDataConUnique 14
+trueDataConKey                         = mkPreludeDataConUnique 15
+wordDataConKey                         = mkPreludeDataConUnique 16
+ioDataConKey                           = mkPreludeDataConUnique 17
+ptrDataConKey                          = mkPreludeDataConUnique 18
+funPtrDataConKey                       = mkPreludeDataConUnique 19
+
+-- Generic data constructors
+crossDataConKey                                = mkPreludeDataConUnique 20
+inlDataConKey                          = mkPreludeDataConUnique 21
+inrDataConKey                          = mkPreludeDataConUnique 22
+genUnitDataConKey                      = mkPreludeDataConUnique 23
 \end{code}
 
 %************************************************************************
@@ -638,10 +825,12 @@ integerPlusOneIdKey             = mkPreludeMiscIdUnique 10
 integerPlusTwoIdKey          = mkPreludeMiscIdUnique 11
 integerZeroIdKey             = mkPreludeMiscIdUnique 12
 int2IntegerIdKey             = mkPreludeMiscIdUnique 13
+seqIdKey                     = mkPreludeMiscIdUnique 14
 irrefutPatErrorIdKey         = mkPreludeMiscIdUnique 15
 eqStringIdKey                = mkPreludeMiscIdUnique 16
 noMethodBindingErrorIdKey     = mkPreludeMiscIdUnique 17
 nonExhaustiveGuardsErrorIdKey = mkPreludeMiscIdUnique 18
+errorCStringIdKey            = mkPreludeMiscIdUnique 19 
 parErrorIdKey                = mkPreludeMiscIdUnique 20
 parIdKey                     = mkPreludeMiscIdUnique 21
 patErrorIdKey                = mkPreludeMiscIdUnique 22
@@ -661,18 +850,33 @@ zipIdKey                = mkPreludeMiscIdUnique 35
 bindIOIdKey                  = mkPreludeMiscIdUnique 36
 returnIOIdKey                = mkPreludeMiscIdUnique 37
 deRefStablePtrIdKey          = mkPreludeMiscIdUnique 38
-makeStablePtrIdKey           = mkPreludeMiscIdUnique 39
+newStablePtrIdKey            = mkPreludeMiscIdUnique 39
 getTagIdKey                  = mkPreludeMiscIdUnique 40
 plusIntegerIdKey             = mkPreludeMiscIdUnique 41
 timesIntegerIdKey            = mkPreludeMiscIdUnique 42
+printIdKey                   = mkPreludeMiscIdUnique 43
+failIOIdKey                  = mkPreludeMiscIdUnique 44
+nullAddrIdKey                = mkPreludeMiscIdUnique 46
+voidArgIdKey                 = mkPreludeMiscIdUnique 47
+splitIdKey                   = mkPreludeMiscIdUnique 48
+fstIdKey                     = mkPreludeMiscIdUnique 49
+sndIdKey                     = mkPreludeMiscIdUnique 50
+otherwiseIdKey               = mkPreludeMiscIdUnique 51
+mapIdKey                     = mkPreludeMiscIdUnique 52
+assertIdKey                  = mkPreludeMiscIdUnique 53
+runSTRepIdKey                = mkPreludeMiscIdUnique 54
+
+dollarMainKey                = mkPreludeMiscIdUnique 55
+runMainKey                   = mkPreludeMiscIdUnique 56
 \end{code}
 
 Certain class operations from Prelude classes.  They get their own
 uniques so we can look them up easily when we want to conjure them up
 during type checking.
 
-\begin{code}                                     
-fromIntClassOpKey            = mkPreludeMiscIdUnique 101
+\begin{code}
+       -- Just a place holder for  unbound variables  produced by the renamer:
+unboundKey                   = mkPreludeMiscIdUnique 101 
 fromIntegerClassOpKey        = mkPreludeMiscIdUnique 102
 minusClassOpKey                      = mkPreludeMiscIdUnique 103
 fromRationalClassOpKey       = mkPreludeMiscIdUnique 104
@@ -682,22 +886,50 @@ enumFromToClassOpKey            = mkPreludeMiscIdUnique 107
 enumFromThenToClassOpKey      = mkPreludeMiscIdUnique 108
 eqClassOpKey                 = mkPreludeMiscIdUnique 109
 geClassOpKey                 = mkPreludeMiscIdUnique 110
+negateClassOpKey             = mkPreludeMiscIdUnique 111
 failMClassOpKey                      = mkPreludeMiscIdUnique 112
 thenMClassOpKey                      = mkPreludeMiscIdUnique 113 -- (>>=)
-       -- Just a place holder for  unbound variables  produced by the renamer:
-unboundKey                   = mkPreludeMiscIdUnique 114 
 fromEnumClassOpKey           = mkPreludeMiscIdUnique 115
-                             
-mainKey                              = mkPreludeMiscIdUnique 116
 returnMClassOpKey            = mkPreludeMiscIdUnique 117
-otherwiseIdKey               = mkPreludeMiscIdUnique 118
 toEnumClassOpKey             = mkPreludeMiscIdUnique 119
-mapIdKey                     = mkPreludeMiscIdUnique 120
 \end{code}
 
+
+%************************************************************************
+%*                                                                     *
+\subsection{Standard groups of types}
+%*                                                                     *
+%************************************************************************
+
 \begin{code}
-assertIdKey                  = mkPreludeMiscIdUnique 121
-runSTRepIdKey                = mkPreludeMiscIdUnique 122
+numericTyKeys = 
+       [ addrTyConKey
+       , wordTyConKey
+       , intTyConKey
+       , integerTyConKey
+       , doubleTyConKey
+       , floatTyConKey
+       ]
+
+       -- Renamer always imports these data decls replete with constructors
+       -- so that desugarer can always see their constructors.  Ugh!
+cCallishTyKeys = 
+       [ addrTyConKey
+       , wordTyConKey
+       , byteArrayTyConKey
+       , mutableByteArrayTyConKey
+       , foreignObjTyConKey
+       , foreignPtrTyConKey
+       , stablePtrTyConKey
+       , int8TyConKey
+       , int16TyConKey
+       , int32TyConKey
+       , int64TyConKey
+       , word8TyConKey
+       , word16TyConKey
+       , word32TyConKey
+       , word64TyConKey
+       ]
 \end{code}
 
 
@@ -710,14 +942,16 @@ runSTRepIdKey                   = mkPreludeMiscIdUnique 122
 @derivableClassKeys@ is also used in checking \tr{deriving} constructs
 (@TcDeriv@).
 
-@derivingOccurrences@ maps a class name to a list of the (qualified) occurrences
-that will be mentioned by  the derived code for the class when it is later generated.
-We don't need to put in things that are WiredIn (because they are already mapped to their
-correct name by the @NameSupply@.  The class itself, and all its class ops, is
-already flagged as an occurrence so we don't need to mention that either.
+@derivingOccurrences@ maps a class name to a list of the (qualified)
+occurrences that will be mentioned by the derived code for the class
+when it is later generated.  We don't need to put in things that are
+WiredIn (because they are already mapped to their correct name by the
+@NameSupply@.  The class itself, and all its class ops, is already
+flagged as an occurrence so we don't need to mention that either.
 
-@derivingOccurrences@ has an item for every derivable class, even if that item is empty,
-because we treat lookup failure as indicating that the class is illegal in a deriving clause.
+@derivingOccurrences@ has an item for every derivable class, even if
+that item is empty, because we treat lookup failure as indicating that
+the class is illegal in a deriving clause.
 
 \begin{code}
 derivingOccurrences :: UniqFM [RdrName]
@@ -782,15 +1016,6 @@ fractionalClassKeys =
 
        -- the strictness analyser needs to know about numeric types
        -- (see SaAbsInt.lhs)
-numericTyKeys = 
-       [ addrTyConKey
-       , wordTyConKey
-       , intTyConKey
-       , integerTyConKey
-       , doubleTyConKey
-       , floatTyConKey
-       ]
-
 needsDataDeclCtxtClassKeys = -- see comments in TcDeriv
        [ readClassKey
        ]
@@ -800,25 +1025,6 @@ cCallishClassKeys =
        , cReturnableClassKey
        ]
 
-       -- Renamer always imports these data decls replete with constructors
-       -- so that desugarer can always see their constructors.  Ugh!
-cCallishTyKeys = 
-       [ addrTyConKey
-       , wordTyConKey
-       , byteArrayTyConKey
-       , mutableByteArrayTyConKey
-       , foreignObjTyConKey
-       , stablePtrTyConKey
-       , int8TyConKey
-       , int16TyConKey
-       , int32TyConKey
-       , int64TyConKey
-       , word8TyConKey
-       , word16TyConKey
-       , word32TyConKey
-       , word64TyConKey
-       ]
-
 standardClassKeys
   = derivableClassKeys ++ numericClassKeys ++ cCallishClassKeys
     --