[project @ 1999-04-13 15:50:29 by sof]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelInfo.lhs
index 830247a..4877086 100644 (file)
@@ -9,7 +9,7 @@ module PrelInfo (
                        -- that is all. If something is in here, you know that
                        -- if it's used at all then it's Name will be just as
                        -- it is here, unique and all.  Includes all the 
-                       -- wiredd-in names.
+                       -- wired-in names.
 
        thinAirIdNames, -- Names of non-wired-in Ids that may be used out of
        setThinAirIds,  -- thin air in any compilation. If they are not wired in
@@ -25,8 +25,7 @@ module PrelInfo (
 
 
        -- Here are the thin-air Ids themselves
-       int2IntegerId, addr2IntegerId,
-       integerMinusOneId, integerZeroId, integerPlusOneId, integerPlusTwoId,
+       addr2IntegerId,
        packStringForCId, unpackCStringId, unpackCString2Id,
        unpackCStringAppendId, unpackCStringFoldrId,
        foldrId,
@@ -34,7 +33,7 @@ module PrelInfo (
        -- Random other things
        main_NAME, ioTyCon_NAME,
        deRefStablePtr_NAME, makeStablePtr_NAME,
-       bindIO_NAME,
+       bindIO_NAME, 
 
        maybeCharLikeCon, maybeIntLikeCon,
        needsDataDeclCtxtClassKeys, cCallishClassKeys, cCallishTyKeys, 
@@ -79,12 +78,13 @@ import TysPrim              -- TYPES
 import TysWiredIn
 
 -- others:
-import RdrHsSyn                ( RdrName(..), varQual, tcQual, qual )
-import BasicTypes      ( IfaceFlavour )
+import RdrName         ( RdrName, mkPreludeQual )
 import Var             ( varUnique, Id )
-import Name            ( Name, OccName, Provenance(..),
-                         getName, mkGlobalName, modAndOcc
+import Name            ( Name, OccName, Provenance(..), 
+                         NameSpace, tcName, clsName, varName, dataName,
+                         getName, mkGlobalName, nameRdrName, systemProvenance
                        )
+import RdrName         ( rdrNameModule, rdrNameOcc, mkSrcQual )
 import Class           ( Class, classKey )
 import TyCon           ( tyConDataCons, TyCon )
 import Type            ( funTyCon )
@@ -171,6 +171,7 @@ prim_tycons
     , mutVarPrimTyCon
     , realWorldTyCon
     , stablePtrPrimTyCon
+    , stableNamePrimTyCon
     , statePrimTyCon
     , threadIdPrimTyCon
     , wordPrimTyCon
@@ -187,17 +188,9 @@ data_tycons
     , doubleTyCon
     , floatTyCon
     , intTyCon
-    , int8TyCon
-    , int16TyCon
-    , int32TyCon
-    , int64TyCon
     , integerTyCon
     , listTyCon
     , wordTyCon
-    , word8TyCon
-    , word16TyCon
-    , word32TyCon
-    , word64TyCon
     ]
 \end{code}
 
@@ -256,43 +249,27 @@ thinAirIdNames
   = map mkKnownKeyGlobal
     [
        -- Needed for converting literals to Integers (used in tidyCoreExpr)
-      (varQual (pREL_BASE, SLIT("int2Integer")),  int2IntegerIdKey)    
-    , (varQual (pREL_BASE, SLIT("addr2Integer")), addr2IntegerIdKey)
-
-       -- OK, this is Will's idea: we should have magic values for Integers 0,
-       -- +1, +2, and -1 (go ahead, fire me):
-    , (varQual (pREL_BASE, SLIT("integer_0")),  integerZeroIdKey)    
-    , (varQual (pREL_BASE, SLIT("integer_1")),  integerPlusOneIdKey) 
-    , (varQual (pREL_BASE, SLIT("integer_2")),  integerPlusTwoIdKey) 
-    , (varQual (pREL_BASE, SLIT("integer_m1")), integerMinusOneIdKey)
-
+      (varQual pREL_BASE SLIT("addr2Integer"), addr2IntegerIdKey)
 
        -- String literals
-    , (varQual (pREL_PACK, SLIT("packCString#")),   packCStringIdKey)
-    , (varQual (pREL_PACK, SLIT("unpackCString#")), unpackCStringIdKey)
-    , (varQual (pREL_PACK, SLIT("unpackNBytes#")),  unpackCString2IdKey)
-    , (varQual (pREL_PACK, SLIT("unpackAppendCString#")), unpackCStringAppendIdKey)
-    , (varQual (pREL_PACK, SLIT("unpackFoldrCString#")),  unpackCStringFoldrIdKey)
+    , (varQual pREL_PACK SLIT("packCString#"),   packCStringIdKey)
+    , (varQual pREL_PACK SLIT("unpackCString#"), unpackCStringIdKey)
+    , (varQual pREL_PACK SLIT("unpackNBytes#"),  unpackCString2IdKey)
+    , (varQual pREL_PACK SLIT("unpackAppendCString#"), unpackCStringAppendIdKey)
+    , (varQual pREL_PACK SLIT("unpackFoldrCString#"),  unpackCStringFoldrIdKey)
 
        -- Folds; introduced by desugaring list comprehensions
-    , (varQual (pREL_BASE, SLIT("foldr")), foldrIdKey)
+    , (varQual pREL_BASE SLIT("foldr"), foldrIdKey)
     ]
 
 thinAirModules = [pREL_PACK]   -- See notes with RnIfaces.findAndReadIface
 
-noRepIntegerIds = [integerZeroId, integerPlusOneId, integerPlusTwoId, integerMinusOneId,
-                  int2IntegerId, addr2IntegerId]
+noRepIntegerIds = [addr2IntegerId]
 
 noRepStrIds = [unpackCString2Id, unpackCStringId]
 
-int2IntegerId  = lookupThinAirId int2IntegerIdKey
 addr2IntegerId = lookupThinAirId addr2IntegerIdKey
 
-integerMinusOneId = lookupThinAirId integerMinusOneIdKey
-integerZeroId     = lookupThinAirId integerZeroIdKey
-integerPlusOneId  = lookupThinAirId integerPlusOneIdKey
-integerPlusTwoId  = lookupThinAirId integerPlusTwoIdKey
-
 packStringForCId = lookupThinAirId packCStringIdKey
 unpackCStringId  = lookupThinAirId unpackCStringIdKey
 unpackCString2Id = lookupThinAirId unpackCString2IdKey 
@@ -336,8 +313,9 @@ Ids, Synonyms, Classes and ClassOps with builtin keys.
 
 \begin{code}
 mkKnownKeyGlobal :: (RdrName, Unique) -> Name
-mkKnownKeyGlobal (Qual mod occ hif, uniq)
-  = mkGlobalName uniq mod occ NoProvenance
+mkKnownKeyGlobal (rdr_name, uniq)
+  = mkGlobalName uniq (rdrNameModule rdr_name) (rdrNameOcc rdr_name)
+                systemProvenance
 
 ioTyCon_NAME     = mkKnownKeyGlobal (ioTyCon_RDR,       ioTyConKey)
 main_NAME        = mkKnownKeyGlobal (main_RDR,          mainKey)
@@ -362,6 +340,7 @@ knownKeyNames
     , (mutableByteArrayTyCon_RDR, mutableByteArrayTyConKey)
     , (foreignObjTyCon_RDR,    foreignObjTyConKey)
     , (stablePtrTyCon_RDR,     stablePtrTyConKey)
+    , (stablePtrDataCon_RDR,    stablePtrDataConKey)
 
        --  Classes.  *Must* include:
        --      classes that are grabbed by key (e.g., eqClassKey)
@@ -415,6 +394,16 @@ knownKeyNames
     , (filter_RDR,             filterIdKey)
     , (zip_RDR,                        zipIdKey)
 
+       -- 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)
+
        -- Others
     , (otherwiseId_RDR,                otherwiseIdKey)
     , (assert_RDR,             assertIdKey)
@@ -440,116 +429,127 @@ These RdrNames are not really "built in", but some parts of the compiler
 to write them all down in one place.
 
 \begin{code}
-prelude_primop op = qual (modAndOcc (mkPrimitiveId op))
-
-main_RDR               = varQual (mAIN,     SLIT("main"))
-otherwiseId_RDR        = varQual (pREL_BASE, SLIT("otherwise"))
-
-intTyCon_RDR           = qual (modAndOcc intTyCon)
-ioTyCon_RDR            = tcQual  (pREL_IO_BASE, SLIT("IO"))
-ioDataCon_RDR                  = varQual (pREL_IO_BASE, SLIT("IO"))
-bindIO_RDR             = varQual (pREL_IO_BASE, SLIT("bindIO"))
-
-orderingTyCon_RDR      = tcQual (pREL_BASE, SLIT("Ordering"))
-rationalTyCon_RDR      = tcQual (pREL_NUM,  SLIT("Rational"))
-ratioTyCon_RDR         = tcQual (pREL_NUM,  SLIT("Ratio"))
-ratioDataCon_RDR       = varQual (pREL_NUM, SLIT(":%"))
-
-byteArrayTyCon_RDR             = tcQual (pREL_ARR,  SLIT("ByteArray"))
-mutableByteArrayTyCon_RDR      = tcQual (pREL_ARR,  SLIT("MutableByteArray"))
-
-foreignObjTyCon_RDR    = tcQual (pREL_IO_BASE, SLIT("ForeignObj"))
-stablePtrTyCon_RDR     = tcQual (pREL_FOREIGN, SLIT("StablePtr"))
-deRefStablePtr_RDR      = varQual (pREL_FOREIGN, SLIT("deRefStablePtr"))
-makeStablePtr_RDR       = varQual (pREL_FOREIGN, SLIT("makeStablePtr"))
-
-eqClass_RDR            = tcQual (pREL_BASE, SLIT("Eq"))
-ordClass_RDR           = tcQual (pREL_BASE, SLIT("Ord"))
-boundedClass_RDR       = tcQual (pREL_BASE, SLIT("Bounded"))
-numClass_RDR           = tcQual (pREL_BASE, SLIT("Num"))
-enumClass_RDR          = tcQual (pREL_BASE, SLIT("Enum"))
-monadClass_RDR         = tcQual (pREL_BASE, SLIT("Monad"))
-monadPlusClass_RDR     = tcQual (pREL_BASE, SLIT("MonadPlus"))
-functorClass_RDR       = tcQual (pREL_BASE, SLIT("Functor"))
-showClass_RDR          = tcQual (pREL_BASE, SLIT("Show"))
-realClass_RDR          = tcQual (pREL_NUM,  SLIT("Real"))
-integralClass_RDR      = tcQual (pREL_NUM,  SLIT("Integral"))
-fractionalClass_RDR    = tcQual (pREL_NUM,  SLIT("Fractional"))
-floatingClass_RDR      = tcQual (pREL_NUM,  SLIT("Floating"))
-realFracClass_RDR      = tcQual (pREL_NUM,  SLIT("RealFrac"))
-realFloatClass_RDR     = tcQual (pREL_NUM,  SLIT("RealFloat"))
-readClass_RDR          = tcQual (pREL_READ, SLIT("Read"))
-ixClass_RDR            = tcQual (iX,        SLIT("Ix"))
-ccallableClass_RDR     = tcQual (pREL_GHC,  SLIT("CCallable"))
-creturnableClass_RDR   = tcQual (pREL_GHC,  SLIT("CReturnable"))
-
-fromInt_RDR       = varQual (pREL_BASE, SLIT("fromInt"))
-fromInteger_RDR           = varQual (pREL_BASE, SLIT("fromInteger"))
-minus_RDR         = varQual (pREL_BASE, SLIT("-"))
-succ_RDR          = varQual (pREL_BASE, SLIT("succ"))
-pred_RDR          = varQual (pREL_BASE, SLIT("pred"))
-toEnum_RDR        = varQual (pREL_BASE, SLIT("toEnum"))
-fromEnum_RDR      = varQual (pREL_BASE, SLIT("fromEnum"))
-enumFrom_RDR      = varQual (pREL_BASE, SLIT("enumFrom"))
-enumFromTo_RDR    = varQual (pREL_BASE, SLIT("enumFromTo"))
-enumFromThen_RDR   = varQual (pREL_BASE, SLIT("enumFromThen"))
-enumFromThenTo_RDR = varQual (pREL_BASE, SLIT("enumFromThenTo"))
-
-thenM_RDR         = varQual (pREL_BASE,    SLIT(">>="))
-returnM_RDR       = varQual (pREL_BASE,    SLIT("return"))
-failM_RDR         = varQual (pREL_BASE,    SLIT("fail"))
-
-fromRational_RDR   = varQual (pREL_NUM,     SLIT("fromRational"))
-negate_RDR        = varQual (pREL_BASE, SLIT("negate"))
-eq_RDR            = varQual (pREL_BASE, SLIT("=="))
-ne_RDR            = varQual (pREL_BASE, SLIT("/="))
-le_RDR            = varQual (pREL_BASE, SLIT("<="))
-lt_RDR            = varQual (pREL_BASE, SLIT("<"))
-ge_RDR            = varQual (pREL_BASE, SLIT(">="))
-gt_RDR            = varQual (pREL_BASE, SLIT(">"))
-ltTag_RDR         = varQual (pREL_BASE,  SLIT("LT"))
-eqTag_RDR         = varQual (pREL_BASE,  SLIT("EQ"))
-gtTag_RDR         = varQual (pREL_BASE,  SLIT("GT"))
-max_RDR                   = varQual (pREL_BASE, SLIT("max"))
-min_RDR                   = varQual (pREL_BASE, SLIT("min"))
-compare_RDR       = varQual (pREL_BASE, SLIT("compare"))
-minBound_RDR      = varQual (pREL_BASE, SLIT("minBound"))
-maxBound_RDR      = varQual (pREL_BASE, SLIT("maxBound"))
-false_RDR         = varQual (pREL_BASE,  SLIT("False"))
-true_RDR          = varQual (pREL_BASE,  SLIT("True"))
-and_RDR                   = varQual (pREL_BASE,  SLIT("&&"))
-not_RDR                   = varQual (pREL_BASE,  SLIT("not"))
-compose_RDR       = varQual (pREL_BASE, SLIT("."))
-append_RDR        = varQual (pREL_BASE, SLIT("++"))
-map_RDR                   = varQual (pREL_BASE, SLIT("map"))
-concat_RDR        = varQual (pREL_LIST, SLIT("concat"))
-filter_RDR        = varQual (pREL_LIST, SLIT("filter"))
-zip_RDR                   = varQual (pREL_LIST, SLIT("zip"))
-
-showList___RDR     = varQual (pREL_BASE,  SLIT("showList__"))
-showsPrec_RDR     = varQual (pREL_BASE, SLIT("showsPrec"))
-showList_RDR      = varQual (pREL_BASE, SLIT("showList"))
-showSpace_RDR     = varQual (pREL_BASE,  SLIT("showSpace"))
-showString_RDR    = varQual (pREL_BASE, SLIT("showString"))
-showParen_RDR     = varQual (pREL_BASE, SLIT("showParen"))
-
-range_RDR         = varQual (iX,   SLIT("range"))
-index_RDR         = varQual (iX,   SLIT("index"))
-inRange_RDR       = varQual (iX,   SLIT("inRange"))
-
-readsPrec_RDR     = varQual (pREL_READ, SLIT("readsPrec"))
-readList_RDR      = varQual (pREL_READ, SLIT("readList"))
-readParen_RDR     = varQual (pREL_READ, SLIT("readParen"))
-lex_RDR                   = varQual (pREL_READ,  SLIT("lex"))
-readList___RDR     = varQual (pREL_READ,  SLIT("readList__"))
-
-plus_RDR          = varQual (pREL_BASE, SLIT("+"))
-times_RDR         = varQual (pREL_BASE, SLIT("*"))
-mkInt_RDR         = varQual (pREL_BASE, SLIT("I#"))
-
-error_RDR         = varQual (pREL_ERR, SLIT("error"))
-assert_RDR         = varQual (pREL_GHC, SLIT("assert"))
-assertErr_RDR      = varQual (pREL_ERR, SLIT("assertError"))
+prelude_primop op = nameRdrName (getName (mkPrimitiveId op))
+
+main_RDR               = varQual mAIN      SLIT("main")
+otherwiseId_RDR        = varQual pREL_BASE SLIT("otherwise")
+
+intTyCon_RDR           = nameRdrName (getName intTyCon)
+ioTyCon_RDR            = tcQual   pREL_IO_BASE SLIT("IO")
+ioDataCon_RDR                  = dataQual pREL_IO_BASE SLIT("IO")
+bindIO_RDR             = varQual  pREL_IO_BASE SLIT("bindIO")
+
+orderingTyCon_RDR      = tcQual   pREL_BASE SLIT("Ordering")
+rationalTyCon_RDR      = tcQual   pREL_NUM  SLIT("Rational")
+ratioTyCon_RDR         = tcQual   pREL_NUM  SLIT("Ratio")
+ratioDataCon_RDR       = dataQual pREL_NUM  SLIT(":%")
+
+byteArrayTyCon_RDR             = tcQual pREL_ARR  SLIT("ByteArray")
+mutableByteArrayTyCon_RDR      = tcQual pREL_ARR  SLIT("MutableByteArray")
+
+foreignObjTyCon_RDR    = tcQual   pREL_IO_BASE SLIT("ForeignObj")
+stablePtrTyCon_RDR     = tcQual   pREL_STABLE SLIT("StablePtr")
+stablePtrDataCon_RDR   = dataQual pREL_STABLE SLIT("StablePtr")
+deRefStablePtr_RDR      = varQual  pREL_STABLE SLIT("deRefStablePtr")
+makeStablePtr_RDR       = varQual  pREL_STABLE SLIT("makeStablePtr")
+
+eqClass_RDR            = clsQual pREL_BASE SLIT("Eq")
+ordClass_RDR           = clsQual pREL_BASE SLIT("Ord")
+boundedClass_RDR       = clsQual pREL_BASE SLIT("Bounded")
+numClass_RDR           = clsQual pREL_BASE SLIT("Num")
+enumClass_RDR          = clsQual pREL_BASE SLIT("Enum")
+monadClass_RDR         = clsQual pREL_BASE SLIT("Monad")
+monadPlusClass_RDR     = clsQual pREL_BASE SLIT("MonadPlus")
+functorClass_RDR       = clsQual pREL_BASE SLIT("Functor")
+showClass_RDR          = clsQual pREL_BASE SLIT("Show")
+realClass_RDR          = clsQual pREL_NUM  SLIT("Real")
+integralClass_RDR      = clsQual pREL_NUM  SLIT("Integral")
+fractionalClass_RDR    = clsQual pREL_NUM  SLIT("Fractional")
+floatingClass_RDR      = clsQual pREL_NUM  SLIT("Floating")
+realFracClass_RDR      = clsQual pREL_NUM  SLIT("RealFrac")
+realFloatClass_RDR     = clsQual pREL_NUM  SLIT("RealFloat")
+readClass_RDR          = clsQual pREL_READ SLIT("Read")
+ixClass_RDR            = clsQual iX        SLIT("Ix")
+ccallableClass_RDR     = clsQual pREL_GHC  SLIT("CCallable")
+creturnableClass_RDR   = clsQual pREL_GHC  SLIT("CReturnable")
+
+fromInt_RDR       = varQual pREL_BASE SLIT("fromInt")
+fromInteger_RDR           = varQual pREL_BASE SLIT("fromInteger")
+minus_RDR         = varQual pREL_BASE SLIT("-")
+succ_RDR          = varQual pREL_BASE SLIT("succ")
+pred_RDR          = varQual pREL_BASE SLIT("pred")
+toEnum_RDR        = varQual pREL_BASE SLIT("toEnum")
+fromEnum_RDR      = varQual pREL_BASE SLIT("fromEnum")
+enumFrom_RDR      = varQual pREL_BASE SLIT("enumFrom")
+enumFromTo_RDR    = varQual pREL_BASE SLIT("enumFromTo")
+enumFromThen_RDR   = varQual pREL_BASE SLIT("enumFromThen")
+enumFromThenTo_RDR = varQual pREL_BASE SLIT("enumFromThenTo")
+
+thenM_RDR         = varQual pREL_BASE SLIT(">>=")
+returnM_RDR       = varQual pREL_BASE SLIT("return")
+failM_RDR         = varQual pREL_BASE SLIT("fail")
+
+fromRational_RDR   = varQual pREL_NUM  SLIT("fromRational")
+negate_RDR        = varQual pREL_BASE SLIT("negate")
+eq_RDR            = varQual pREL_BASE SLIT("==")
+ne_RDR            = varQual pREL_BASE SLIT("/=")
+le_RDR            = varQual pREL_BASE SLIT("<=")
+lt_RDR            = varQual pREL_BASE SLIT("<")
+ge_RDR            = varQual pREL_BASE SLIT(">=")
+gt_RDR            = varQual pREL_BASE SLIT(">")
+ltTag_RDR         = dataQual pREL_BASE SLIT("LT")
+eqTag_RDR         = dataQual pREL_BASE SLIT("EQ")
+gtTag_RDR         = dataQual pREL_BASE SLIT("GT")
+max_RDR                   = varQual pREL_BASE SLIT("max")
+min_RDR                   = varQual pREL_BASE SLIT("min")
+compare_RDR       = varQual pREL_BASE SLIT("compare")
+minBound_RDR      = varQual pREL_BASE SLIT("minBound")
+maxBound_RDR      = varQual pREL_BASE SLIT("maxBound")
+false_RDR         = dataQual pREL_BASE SLIT("False")
+true_RDR          = dataQual pREL_BASE SLIT("True")
+and_RDR                   = varQual pREL_BASE SLIT("&&")
+not_RDR                   = varQual pREL_BASE SLIT("not")
+compose_RDR       = varQual pREL_BASE SLIT(".")
+append_RDR        = varQual pREL_BASE SLIT("++")
+map_RDR                   = varQual pREL_BASE SLIT("map")
+concat_RDR        = varQual mONAD     SLIT("concat")
+filter_RDR        = varQual mONAD     SLIT("filter")
+zip_RDR                   = varQual pREL_LIST SLIT("zip")
+
+showList___RDR     = varQual pREL_BASE  SLIT("showList__")
+showsPrec_RDR     = varQual pREL_BASE SLIT("showsPrec")
+showList_RDR      = varQual pREL_BASE SLIT("showList")
+showSpace_RDR     = varQual pREL_BASE SLIT("showSpace")
+showString_RDR    = varQual pREL_BASE SLIT("showString")
+showParen_RDR     = varQual pREL_BASE SLIT("showParen")
+
+range_RDR         = varQual iX   SLIT("range")
+index_RDR         = varQual iX   SLIT("index")
+inRange_RDR       = varQual iX   SLIT("inRange")
+
+readsPrec_RDR     = varQual pREL_READ SLIT("readsPrec")
+readList_RDR      = varQual pREL_READ SLIT("readList")
+readParen_RDR     = varQual pREL_READ SLIT("readParen")
+lex_RDR                   = varQual pREL_READ SLIT("lex")
+readList___RDR     = varQual pREL_READ SLIT("readList__")
+
+plus_RDR          = varQual pREL_BASE SLIT("+")
+times_RDR         = varQual pREL_BASE SLIT("*")
+mkInt_RDR         = dataQual pREL_BASE SLIT("I#")
+
+int8TyCon_RDR    = tcQual iNT       SLIT("Int8")
+int16TyCon_RDR   = tcQual iNT       SLIT("Int16")
+int32TyCon_RDR   = tcQual iNT       SLIT("Int32")
+int64TyCon_RDR   = tcQual pREL_ADDR SLIT("Int64")
+
+word8TyCon_RDR    = tcQual wORD      SLIT("Word8")
+word16TyCon_RDR   = tcQual wORD      SLIT("Word16")
+word32TyCon_RDR   = tcQual wORD      SLIT("Word32")
+word64TyCon_RDR   = tcQual pREL_ADDR SLIT("Word64")
+
+error_RDR         = varQual pREL_ERR SLIT("error")
+assert_RDR         = varQual pREL_GHC SLIT("assert")
+assertErr_RDR      = varQual pREL_ERR SLIT("assertError")
 
 eqH_Char_RDR   = prelude_primop CharEqOp
 ltH_Char_RDR   = prelude_primop CharLtOp
@@ -570,10 +570,12 @@ minusH_RDR        = prelude_primop IntSubOp
 
 \begin{code}
 mkTupConRdrName :: Int -> RdrName 
-mkTupConRdrName arity = varQual (mkTupNameStr arity)
+mkTupConRdrName arity = case mkTupNameStr arity of
+                         (mod, occ) -> dataQual mod occ
 
 mkUbxTupConRdrName :: Int -> RdrName
-mkUbxTupConRdrName arity = varQual (mkUbxTupNameStr arity)
+mkUbxTupConRdrName arity = case mkUbxTupNameStr arity of
+                               (mod, occ) -> dataQual mod occ
 \end{code}
 
 
@@ -606,7 +608,7 @@ deriving_occ_info
     , (ordClassKey,    [intTyCon_RDR, compose_RDR, eqTag_RDR])
                                -- EQ (from Ordering) is needed to force in the constructors
                                -- as well as the type constructor.
-    , (enumClassKey,   [intTyCon_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
+    , (enumClassKey,   [intTyCon_RDR, eq_RDR, ge_RDR, and_RDR, map_RDR, plus_RDR, showsPrec_RDR, append_RDR]) 
                                -- The last two Enum deps are only used to produce better
                                -- error msgs for derived toEnum methods.
     , (boundedClassKey,        [intTyCon_RDR])
@@ -677,7 +679,7 @@ cCallishClassKeys =
        ]
 
        -- Renamer always imports these data decls replete with constructors
-       -- so that desugarer can always see the constructor.  Ugh!
+       -- so that desugarer can always see their constructors.  Ugh!
 cCallishTyKeys = 
        [ addrTyConKey
        , wordTyConKey
@@ -685,6 +687,14 @@ cCallishTyKeys =
        , mutableByteArrayTyConKey
        , foreignObjTyConKey
        , stablePtrTyConKey
+       , int8TyConKey
+       , int16TyConKey
+       , int32TyConKey
+       , int64TyConKey
+       , word8TyConKey
+       , word16TyConKey
+       , word32TyConKey
+       , word64TyConKey
        ]
 
 standardClassKeys
@@ -701,3 +711,18 @@ noDictClassKeys    -- These classes are used only for type annotations;
                        -- they are not implemented by dictionaries, ever.
   = cCallishClassKeys
 \end{code}
+
+
+%************************************************************************
+%*                                                                     *
+\subsection{Local helpers}
+%*                                                                     *
+%************************************************************************
+
+\begin{code}
+varQual  = mkPreludeQual varName
+dataQual = mkPreludeQual dataName
+tcQual   = mkPreludeQual tcName
+clsQual  = mkPreludeQual clsName
+\end{code}
+