[project @ 2003-05-29 14:39:26 by sof]
[ghc-hetmet.git] / ghc / compiler / prelude / PrelNames.lhs
index aa711d2..6ad4980 100644 (file)
@@ -4,15 +4,7 @@
 \section[PrelNames]{Definitions of prelude modules and names}
 
 
--- MetaHaskell Extension
-to do -- three things
-1) Allocate a key
-2) Make a "Name"
-3) Add the name to knownKeyNames
-
-
-The strings identify built-in prelude modules.  They are
-defined here so as to avod 
+Nota Bene: all Names defined in here should come from the base package
 
 * ModuleNames for prelude modules, 
        e.g.    pREL_BASE_Name :: ModuleName
@@ -50,36 +42,17 @@ module PrelNames (
        -----------------------------------------------------------
        module PrelNames,       -- A huge bunch of (a) Names,  e.g. intTyConName
                                --                 (b) Uniques e.g. intTyConKey
+                               --                 (c) Groups of classes and types
+                               --                 (d) miscellaneous things
                                -- So many that we export them all
-
-       -----------------------------------------------------------
-       knownKeyNames, templateHaskellNames,
-       mkTupNameStr, isBuiltInSyntaxName,
-
-       ------------------------------------------------------------
-       -- Goups of classes and types
-       needsDataDeclCtxtClassKeys, cCallishClassKeys, noDictClassKeys,
-       fractionalClassKeys, numericClassKeys, standardClassKeys,
-       derivableClassKeys,     -- things are needed as a result of a 
-                               -- deriving(C) clause
-       numericTyKeys, cCallishTyKeys,
-
-       mkUnboundName, isUnboundName
     ) where
 
 #include "HsVersions.h"
 
-import Module    ( ModuleName, mkPrelModule, mkHomeModule, mkModuleName,mkVanillaModule )
-import OccName   ( UserFS, dataName, tcName, clsName, 
+import Module    ( ModuleName, mkBasePkgModule, mkHomeModule, mkModuleName )
+import OccName   ( UserFS, dataName, tcName, clsName, varName,
                    mkKindOccFS, mkOccFS
                  )
-
--- to avoid clashes with Meta.var we must make a local alias for OccName.varName
--- we do this by removing varName from the import of OccName above, making
--- a qualified instance of OccName and using OccNameAlias.varName where varName
--- ws previously used in this file.
-import qualified OccName as OccNameAlias 
-
                  
 import RdrName   ( RdrName, nameRdrName, mkOrig, rdrNameOcc )
 import Unique    ( Unique, Uniquable(..), hasKey,
@@ -89,7 +62,6 @@ import Unique   ( Unique, Uniquable(..), hasKey,
                  ) 
 import BasicTypes ( Boxity(..) )
 import Name      ( Name, mkInternalName, mkKnownKeyExternalName, mkWiredInName, nameUnique )
-import NameSet   ( NameSet, mkNameSet )
 import SrcLoc     ( noSrcLoc )
 import Util      ( nOfThem )
 import Panic     ( panic )
@@ -108,7 +80,7 @@ import FastString
 This *local* name is used by the interactive stuff
 
 \begin{code}
-itName uniq = mkInternalName uniq (mkOccFS OccNameAlias.varName FSLIT("it")) noSrcLoc
+itName uniq = mkInternalName uniq (mkOccFS varName FSLIT("it")) noSrcLoc
 \end{code}
 
 \begin{code}
@@ -151,12 +123,9 @@ 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.
 
-
-MetaHaskell Extension
-It is here that the names defiend in module Meta must be added
 \begin{code}
-knownKeyNames :: [Name]
-knownKeyNames
+basicKnownKeyNames :: [Name]
+basicKnownKeyNames
  =  [  -- Type constructors (synonyms especially)
        ioTyConName, ioDataConName,
        runIOName,
@@ -188,6 +157,8 @@ knownKeyNames
        realFloatClassName,             -- numeric
        cCallableClassName,             -- mentioned, ccallish
        cReturnableClassName,           -- mentioned, ccallish
+       dataClassName, 
+       typeableClassName,
 
        -- Numeric stuff
        negateName, minusName, 
@@ -203,6 +174,9 @@ knownKeyNames
        thenMName, bindMName, returnMName, failMName,
        thenIOName, bindIOName, returnIOName, failIOName,
 
+       -- MonadRec stuff
+       mfixName,
+
        -- Ix stuff
        ixClassName, 
 
@@ -228,53 +202,6 @@ knownKeyNames
        filterPName, zipPName, crossPName, indexPName,
        toPName, bpermutePName, bpermuteDftPName, indexOfPName,
 
-        -- MetaHaskell Extension, "the smart constructors" 
-        -- text1 from Meta/work/gen.hs
-        intLName,
-        charLName,
-        plitName,
-        pvarName,
-        ptupName,
-        pconName,
-        ptildeName,
-        paspatName,
-        pwildName,
-        varName,
-        conName,
-        litName,
-        appName,
-        infixEName,        
-        lamName,
-        tupName,
-        doEName,
-        compName,
-        listExpName,
-        condName,
-        letEName,
-        caseEName,
-        infixAppName,
-        sectionLName,
-        sectionRName,        
-        guardedName,
-        normalName,
-        bindStName,
-        letStName,
-        noBindStName,
-        parStName,
-        fromName,
-        fromThenName,
-        fromToName,
-        fromThenToName,
-        liftName,
-        gensymName,
-        returnQName,
-        bindQName,   
-        funName,
-        valName,
-        protoName, matchName, clauseName,
-       exprTyConName, declTyConName, pattTyConName, mtchTyConName, clseTyConName,
-       qTyConName, expTyConName, matTyConName, clsTyConName,
-        
        -- FFI primitive types that are not wired-in.
        int8TyConName, int16TyConName, int32TyConName, int64TyConName,
        word8TyConName, word16TyConName, word32TyConName, word64TyConName,
@@ -282,12 +209,16 @@ knownKeyNames
        -- Others
        unsafeCoerceName, otherwiseIdName, 
        plusIntegerName, timesIntegerName,
-       eqStringName, assertName, runSTRepName,
+       eqStringName, assertName, assertErrorName, runSTRepName,
        printName, splitName, fstName, sndName,
        errorName,
 
        -- Booleans
        andName, orName
+       
+       -- dotnet interop
+       , objectTyConName, marshalObjectName, unmarshalObjectName
+       , marshalStringName, unmarshalStringName, checkDotnetResName
     ]
 
 monadNames :: [Name]   -- The monad ops need by a HsDo
@@ -328,6 +259,10 @@ pREL_REAL_Name    = mkModuleName "GHC.Real"
 pREL_FLOAT_Name   = mkModuleName "GHC.Float"
 pREL_TOP_HANDLER_Name = mkModuleName "GHC.TopHandler"
 sYSTEM_IO_Name   = mkModuleName "System.IO"
+dYNAMIC_Name     = mkModuleName "Data.Dynamic"
+tRAVERSE_Name    = mkModuleName "Data.Traverse"
+gENERICS_Name    = mkModuleName "Data.Generics"
+dOTNET_Name       = mkModuleName "GHC.Dotnet"
 
 rEAD_PREC_Name = mkModuleName "Text.ParserCombinators.ReadPrec"
 lEX_Name       = mkModuleName "Text.Read.Lex"
@@ -335,23 +270,24 @@ lEX_Name       = mkModuleName "Text.Read.Lex"
 mAIN_Name        = mkModuleName "Main"
 pREL_INT_Name    = mkModuleName "GHC.Int"
 pREL_WORD_Name   = mkModuleName "GHC.Word"
-
+mONAD_FIX_Name   = mkModuleName "Control.Monad.Fix"
 aDDR_Name        = mkModuleName "Addr"
 
 gLA_EXTS_Name   = mkModuleName "GHC.Exts"
 
-gHC_PRIM       = mkPrelModule gHC_PRIM_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
+gHC_PRIM       = mkBasePkgModule gHC_PRIM_Name
+pREL_BASE      = mkBasePkgModule pREL_BASE_Name
+pREL_ADDR      = mkBasePkgModule pREL_ADDR_Name
+pREL_PTR       = mkBasePkgModule pREL_PTR_Name
+pREL_STABLE    = mkBasePkgModule pREL_STABLE_Name
+pREL_IO_BASE   = mkBasePkgModule pREL_IO_BASE_Name
+pREL_PACK      = mkBasePkgModule pREL_PACK_Name
+pREL_ERR       = mkBasePkgModule pREL_ERR_Name
+pREL_NUM       = mkBasePkgModule pREL_NUM_Name
+pREL_REAL      = mkBasePkgModule pREL_REAL_Name
+pREL_FLOAT     = mkBasePkgModule pREL_FLOAT_Name
+pRELUDE                = mkBasePkgModule pRELUDE_Name
+
 
 iNTERACTIVE     = mkHomeModule (mkModuleName "$Interactive")
 
@@ -392,8 +328,6 @@ mkTupNameStr Unboxed n = (gHC_PRIM_Name, mkFastString ("(#" ++ nOfThem (n-1) ','
 %************************************************************************
 
 \begin{code}
-getTag_RDR             = nameRdrName getTagName
-
 eq_RDR                         = nameRdrName eqName
 ge_RDR                         = nameRdrName geName
 ne_RDR                         = varQual_RDR  pREL_BASE_Name FSLIT("/=")
@@ -461,6 +395,7 @@ plus_RDR                = varQual_RDR pREL_NUM_Name FSLIT("+")
 compose_RDR            = varQual_RDR pREL_BASE_Name FSLIT(".")
 
 not_RDR                = varQual_RDR pREL_BASE_Name FSLIT("not")
+getTag_RDR             = varQual_RDR pREL_BASE_Name FSLIT("getTag")
 succ_RDR               = varQual_RDR pREL_ENUM_Name FSLIT("succ")
 pred_RDR                = varQual_RDR pREL_ENUM_Name FSLIT("pred")
 minBound_RDR            = varQual_RDR pREL_ENUM_Name FSLIT("minBound")
@@ -493,6 +428,22 @@ showsPrec_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showsPrec")
 showString_RDR          = varQual_RDR pREL_SHOW_Name FSLIT("showString")
 showSpace_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showSpace") 
 showParen_RDR           = varQual_RDR pREL_SHOW_Name FSLIT("showParen") 
+
+typeOf_RDR     = varQual_RDR dYNAMIC_Name FSLIT("typeOf")
+mkTypeRep_RDR  = varQual_RDR dYNAMIC_Name FSLIT("mkAppTy")
+mkTyConRep_RDR = varQual_RDR dYNAMIC_Name FSLIT("mkTyCon")
+
+constr_RDR  = dataQual_RDR gENERICS_Name FSLIT("Constr")
+gfoldl_RDR  = varQual_RDR gENERICS_Name FSLIT("gfoldl")
+gfoldr_RDR  = varQual_RDR gENERICS_Name FSLIT("gfoldr")
+gunfold_RDR = varQual_RDR gENERICS_Name FSLIT("gunfold")
+gmapT_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapT")
+gmapQ_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapQ")
+gmapM_RDR   = varQual_RDR gENERICS_Name FSLIT("gmapM")
+conOf_RDR   = varQual_RDR gENERICS_Name FSLIT("conOf")
+consOf_RDR  = varQual_RDR gENERICS_Name FSLIT("consOf")
+
+undefined_RDR = varQual_RDR pREL_ERR_Name FSLIT("undefined")
 \end{code}
 
 
@@ -515,14 +466,11 @@ dollarMainName = varQual mAIN_Name FSLIT("$main") dollarMainKey
 runIOName      = varQual pREL_TOP_HANDLER_Name FSLIT("runIO") runMainKey
 
 -- Stuff from GHC.Prim
-usOnceTyConName  = kindQual FSLIT(".") usOnceTyConKey
-usManyTyConName  = kindQual FSLIT("!") usManyTyConKey
 superKindName    = kindQual FSLIT("KX") kindConKey
 superBoxityName  = kindQual FSLIT("BX") boxityConKey
 liftedConName    = kindQual FSLIT("*") liftedConKey
 unliftedConName  = kindQual FSLIT("#") unliftedConKey
 openKindConName  = kindQual FSLIT("?") anyBoxConKey
-usageKindConName = kindQual FSLIT("$") usageConKey
 typeConName     = kindQual FSLIT("Type") typeConKey
 
 funTyConName                 = tcQual  gHC_PRIM_Name FSLIT("(->)")  funTyConKey
@@ -553,7 +501,6 @@ threadIdPrimTyConName             = tcQual  gHC_PRIM_Name FSLIT("ThreadId#") threadI
 cCallableClassName           = clsQual gHC_PRIM_Name FSLIT("CCallable") cCallableClassKey
 cReturnableClassName         = clsQual gHC_PRIM_Name FSLIT("CReturnable") cReturnableClassKey
 
-getTagName      = wVarQual gHC_PRIM_Name FSLIT("getTag#")      getTagIdKey
 unsafeCoerceName = wVarQual gHC_PRIM_Name FSLIT("unsafeCoerce#") unsafeCoerceIdKey 
 nullAddrName     = wVarQual gHC_PRIM_Name FSLIT("nullAddr#")   nullAddrIdKey
 seqName                 = wVarQual gHC_PRIM_Name FSLIT("seq")          seqIdKey
@@ -611,7 +558,7 @@ augmentName   = varQual pREL_BASE_Name FSLIT("augment")   augmentIdKey
 appendName       = varQual pREL_BASE_Name FSLIT("++")        appendIdKey
 andName                  = varQual pREL_BASE_Name FSLIT("&&")        andIdKey
 orName           = varQual pREL_BASE_Name FSLIT("||")        orIdKey
-assertName        = varQual pREL_BASE_Name FSLIT("assert")   assertIdKey
+assertName        = varQual pREL_BASE_Name FSLIT("assert")    assertIdKey
 lazyIdName       = wVarQual pREL_BASE_Name FSLIT("lazy")     lazyIdKey
 
 -- PrelTup
@@ -650,6 +597,10 @@ realFloatClassName = clsQual  pREL_FLOAT_Name FSLIT("RealFloat") realFloatClassK
 -- Class Ix
 ixClassName       = clsQual pREL_ARR_Name FSLIT("Ix") ixClassKey
 
+-- Class Typeable and Data
+typeableClassName = clsQual dYNAMIC_Name  FSLIT("Typeable") typeableClassKey
+dataClassName     = clsQual gENERICS_Name FSLIT("Data")     dataClassKey
+
 -- Enum module (Enum, Bounded)
 enumClassName     = clsQual pREL_ENUM_Name FSLIT("Enum") enumClassKey
 enumFromName      = varQual pREL_ENUM_Name FSLIT("enumFrom") enumFromClassOpKey
@@ -663,64 +614,6 @@ concatName   = varQual pREL_LIST_Name FSLIT("concat") concatIdKey
 filterName       = varQual pREL_LIST_Name FSLIT("filter") filterIdKey
 zipName                  = varQual pREL_LIST_Name FSLIT("zip") zipIdKey
 
--- MetaHaskell Extension, "the smart constructors"
--- text3 from Meta/work/gen.hs
-intLName       = varQual mETA_META_Name FSLIT("intL")          intLIdKey
-charLName      = varQual mETA_META_Name FSLIT("charL")         charLIdKey
-plitName       = varQual mETA_META_Name FSLIT("plit")          plitIdKey
-pvarName       = varQual mETA_META_Name FSLIT("pvar")          pvarIdKey
-ptupName       = varQual mETA_META_Name FSLIT("ptup")          ptupIdKey
-pconName       = varQual mETA_META_Name FSLIT("pcon")          pconIdKey
-ptildeName     = varQual mETA_META_Name FSLIT("ptilde")        ptildeIdKey
-paspatName     = varQual mETA_META_Name FSLIT("paspat")        paspatIdKey
-pwildName      = varQual mETA_META_Name FSLIT("pwild")         pwildIdKey
-varName        = varQual mETA_META_Name FSLIT("var")           varIdKey
-conName        = varQual mETA_META_Name FSLIT("con")           conIdKey
-litName        = varQual mETA_META_Name FSLIT("lit")           litIdKey
-appName        = varQual mETA_META_Name FSLIT("app")           appIdKey
-infixEName     = varQual mETA_META_Name FSLIT("infixE")        infixEIdKey
-lamName        = varQual mETA_META_Name FSLIT("lam")           lamIdKey
-tupName        = varQual mETA_META_Name FSLIT("tup")           tupIdKey
-doEName        = varQual mETA_META_Name FSLIT("doE")           doEIdKey
-compName       = varQual mETA_META_Name FSLIT("comp")          compIdKey
-listExpName    = varQual mETA_META_Name FSLIT("listExp")       listExpIdKey
-condName       = varQual mETA_META_Name FSLIT("cond")          condIdKey
-letEName       = varQual mETA_META_Name FSLIT("letE")          letEIdKey
-caseEName      = varQual mETA_META_Name FSLIT("caseE")         caseEIdKey
-infixAppName   = varQual mETA_META_Name FSLIT("infixApp")      infixAppIdKey
-sectionLName   = varQual mETA_META_Name FSLIT("sectionL")      sectionLIdKey
-sectionRName   = varQual mETA_META_Name FSLIT("sectionR")      sectionRIdKey
-guardedName    = varQual mETA_META_Name FSLIT("guarded")       guardedIdKey
-normalName     = varQual mETA_META_Name FSLIT("normal")        normalIdKey
-bindStName     = varQual mETA_META_Name FSLIT("bindSt")        bindStIdKey
-letStName      = varQual mETA_META_Name FSLIT("letSt")         letStIdKey
-noBindStName   = varQual mETA_META_Name FSLIT("noBindSt")      noBindStIdKey
-parStName      = varQual mETA_META_Name FSLIT("parSt")         parStIdKey
-fromName       = varQual mETA_META_Name FSLIT("from")          fromIdKey
-fromThenName   = varQual mETA_META_Name FSLIT("fromThen")      fromThenIdKey
-fromToName     = varQual mETA_META_Name FSLIT("fromTo")        fromToIdKey
-fromThenToName = varQual mETA_META_Name FSLIT("fromThenTo")    fromThenToIdKey
-liftName       = varQual mETA_META_Name FSLIT("lift")          liftIdKey
-gensymName     = varQual mETA_META_Name FSLIT("gensym")        gensymIdKey
-returnQName    = varQual mETA_META_Name FSLIT("returnQ")       returnQIdKey
-bindQName      = varQual mETA_META_Name FSLIT("bindQ")         bindQIdKey
-funName        = varQual mETA_META_Name FSLIT("fun")           funIdKey
-valName        = varQual mETA_META_Name FSLIT("val")           valIdKey
-matchName      = varQual mETA_META_Name FSLIT("match")         matchIdKey
-clauseName     = varQual mETA_META_Name FSLIT("clause")        clauseIdKey
-protoName      = varQual mETA_META_Name FSLIT("proto")         protoIdKey
-exprTyConName  = tcQual  mETA_META_Name FSLIT("Expr")                 exprTyConKey
-declTyConName  = tcQual  mETA_META_Name FSLIT("Decl")                 declTyConKey
-pattTyConName  = tcQual  mETA_META_Name FSLIT("Patt")                 pattTyConKey
-mtchTyConName  = tcQual  mETA_META_Name FSLIT("Mtch")                 mtchTyConKey
-clseTyConName  = tcQual  mETA_META_Name FSLIT("Clse")                 clseTyConKey
-stmtTyConName  = tcQual  mETA_META_Name FSLIT("Stmt")         stmtTyConKey
-
-qTyConName     = tcQual  mETA_META_Name FSLIT("Q")            qTyConKey
-expTyConName   = tcQual  mETA_META_Name FSLIT("Exp")          expTyConKey
-matTyConName   = tcQual  mETA_META_Name FSLIT("Mat")          matTyConKey
-clsTyConName   = tcQual  mETA_META_Name FSLIT("Cls")          clsTyConKey
-
 -- Class Show
 showClassName    = clsQual pREL_SHOW_Name FSLIT("Show")       showClassKey
 
@@ -791,6 +684,7 @@ newStablePtrName      = varQual  pREL_STABLE_Name FSLIT("newStablePtr") newStabl
 
 -- Error module
 errorName               = wVarQual pREL_ERR_Name FSLIT("error")                errorIdKey
+assertErrorName                 = wVarQual pREL_ERR_Name FSLIT("assertError")          assertErrorIdKey
 recSelErrorName                 = wVarQual pREL_ERR_Name FSLIT("recSelError")          recSelErrorIdKey
 runtimeErrorName        = wVarQual pREL_ERR_Name FSLIT("runtimeError")         runtimeErrorIdKey
 irrefutPatErrorName     = wVarQual pREL_ERR_Name FSLIT("irrefutPatError")      irrefutPatErrorIdKey
@@ -805,29 +699,18 @@ runSTRepName         = varQual pREL_ST_Name  FSLIT("runSTRep") runSTRepIdKey
 
 -- The "split" Id for splittable implicit parameters
 splitName          = varQual gLA_EXTS_Name FSLIT("split") splitIdKey
-\end{code}
 
-%************************************************************************
-%*                                                                     *
-\subsection{Standard groups of names}
-%*                                                                     *
-%************************************************************************
+-- Recursive-do notation
+mfixName          = varQual mONAD_FIX_Name FSLIT("mfix") mfixIdKey
+
+-- dotnet interop
+objectTyConName            = wTcQual  dOTNET_Name FSLIT("Object") objectTyConKey
+unmarshalObjectName = varQual  dOTNET_Name FSLIT("unmarshalObject") unmarshalObjectIdKey
+marshalObjectName   = varQual  dOTNET_Name FSLIT("marshalObject") marshalObjectIdKey
+marshalStringName   = varQual  dOTNET_Name FSLIT("marshalString") marshalStringIdKey
+unmarshalStringName = varQual  dOTNET_Name FSLIT("unmarshalString") unmarshalStringIdKey
+checkDotnetResName  = varQual  dOTNET_Name FSLIT("checkResult")     checkDotnetResNameIdKey
 
-\begin{code}
-templateHaskellNames :: NameSet
--- The names that are implicitly mentioned by ``bracket''
--- Should stay in sync with the import list of DsMeta
-templateHaskellNames
-  = mkNameSet [ intLName,charLName, plitName, pvarName, ptupName, 
-               pconName, ptildeName, paspatName, pwildName, 
-                varName, conName, litName, appName, lamName,
-                tupName, doEName, compName, 
-                listExpName, condName, letEName, caseEName,
-                infixAppName, guardedName, normalName,
-               bindStName, letStName, noBindStName, parStName,
-               fromName, fromThenName, fromToName, fromThenToName,
-               funName, valName, liftName,gensymName, bindQName, 
-               appendName, matchName, clauseName ]
 \end{code}
 
 %************************************************************************
@@ -839,24 +722,25 @@ templateHaskellNames
 All these are original names; hence mkOrig
 
 \begin{code}
-varQual  = mk_known_key_name OccNameAlias.varName      -- Note use of local alias vName
-dataQual = mk_known_key_name dataName
+varQual  = mk_known_key_name varName
+dataQual = mk_known_key_name dataName  -- All the constructor names here are for the DataCon
+                                       -- itself, which lives in the VarName name space
 tcQual   = mk_known_key_name tcName
 clsQual  = mk_known_key_name clsName
 
-wVarQual  = mk_wired_in_name OccNameAlias.varName      -- The wired-in analogues
+wVarQual  = mk_wired_in_name varName   -- The wired-in analogues
 wDataQual = mk_wired_in_name dataName          
 wTcQual   = mk_wired_in_name tcName
 
-varQual_RDR  mod str = mkOrig mod (mkOccFS OccNameAlias.varName str)   -- note use of local alias vName
+varQual_RDR  mod str = mkOrig mod (mkOccFS varName str)        -- The RDR analogues
+dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
 tcQual_RDR   mod str = mkOrig mod (mkOccFS tcName str)
 clsQual_RDR  mod str = mkOrig mod (mkOccFS clsName str)
-dataQual_RDR mod str = mkOrig mod (mkOccFS dataName str)
 
 mk_known_key_name space mod str uniq 
-  = mkKnownKeyExternalName mod (mkOccFS space str) uniq 
+  = mkKnownKeyExternalName (mkBasePkgModule mod) (mkOccFS space str) uniq 
 mk_wired_in_name space mod str uniq 
-  = mkWiredInName (mkVanillaModule mod) (mkOccFS space str) uniq
+  = mkWiredInName (mkBasePkgModule mod) (mkOccFS space str) uniq
 
 kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
        -- Kinds are not z-encoded in interface file, hence mkKindOccFS
@@ -875,10 +759,12 @@ kindQual str uq = mkInternalName uq (mkKindOccFS tcName str) noSrcLoc
 boundedClassKey                = mkPreludeClassUnique 1 
 enumClassKey           = mkPreludeClassUnique 2 
 eqClassKey             = mkPreludeClassUnique 3 
+typeableClassKey       = mkPreludeClassUnique 4
 floatingClassKey       = mkPreludeClassUnique 5 
 fractionalClassKey     = mkPreludeClassUnique 6 
 integralClassKey       = mkPreludeClassUnique 7 
 monadClassKey          = mkPreludeClassUnique 8 
+dataClassKey           = mkPreludeClassUnique 9
 functorClassKey                = mkPreludeClassUnique 10
 numClassKey            = mkPreludeClassUnique 11
 ordClassKey            = mkPreludeClassUnique 12
@@ -887,10 +773,8 @@ realClassKey               = mkPreludeClassUnique 14
 realFloatClassKey      = mkPreludeClassUnique 15
 realFracClassKey       = mkPreludeClassUnique 16
 showClassKey           = mkPreludeClassUnique 17
-
 cCallableClassKey      = mkPreludeClassUnique 18
 cReturnableClassKey    = mkPreludeClassUnique 19
-
 ixClassKey             = mkPreludeClassUnique 20
 \end{code}
 
@@ -960,11 +844,6 @@ 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
@@ -973,17 +852,12 @@ genUnitTyConKey                           = mkPreludeTyConUnique 81
 -- Parallel array type constructor
 parrTyConKey                           = mkPreludeTyConUnique 82
 
--- Template Haskell
-qTyConKey    = mkPreludeTyConUnique 83
-exprTyConKey = mkPreludeTyConUnique 84
-declTyConKey = mkPreludeTyConUnique 85
-pattTyConKey = mkPreludeTyConUnique 86
-mtchTyConKey = mkPreludeTyConUnique 87
-clseTyConKey = mkPreludeTyConUnique 88
-stmtTyConKey = mkPreludeTyConUnique 89
-expTyConKey  = mkPreludeTyConUnique 90
-matTyConKey  = mkPreludeTyConUnique 91
-clsTyConKey  = mkPreludeTyConUnique 92
+-- dotnet interop
+objectTyConKey                         = mkPreludeTyConUnique 83
+
+---------------- Template Haskell -------------------
+--     USES TyConUniques 100-119
+-----------------------------------------------------
 
 unitTyConKey = mkTupleTyConUnique Boxed 0
 \end{code}
@@ -1032,7 +906,6 @@ parrDataConKey                             = mkPreludeDataConUnique 24
 
 \begin{code}
 absentErrorIdKey             = mkPreludeMiscIdUnique  1
-getTagIdKey                  = mkPreludeMiscIdUnique  2
 augmentIdKey                 = mkPreludeMiscIdUnique  3
 appendIdKey                  = mkPreludeMiscIdUnique  4
 buildIdKey                   = mkPreludeMiscIdUnique  5
@@ -1091,6 +964,7 @@ andIdKey                 = mkPreludeMiscIdUnique 57
 orIdKey                              = mkPreludeMiscIdUnique 58
 thenIOIdKey                  = mkPreludeMiscIdUnique 59
 lazyIdKey                    = mkPreludeMiscIdUnique 60
+assertErrorIdKey             = mkPreludeMiscIdUnique 61
 
 -- Parallel array functions
 nullPIdKey                   = mkPreludeMiscIdUnique 80
@@ -1107,6 +981,14 @@ enumFromThenToPIdKey          = mkPreludeMiscIdUnique 90
 bpermutePIdKey               = mkPreludeMiscIdUnique 91
 bpermuteDftPIdKey            = mkPreludeMiscIdUnique 92
 indexOfPIdKey                = mkPreludeMiscIdUnique 93
+
+-- dotnet interop
+unmarshalObjectIdKey          = mkPreludeMiscIdUnique 94
+marshalObjectIdKey            = mkPreludeMiscIdUnique 95
+marshalStringIdKey            = mkPreludeMiscIdUnique 96
+unmarshalStringIdKey          = mkPreludeMiscIdUnique 97
+checkDotnetResNameIdKey       = mkPreludeMiscIdUnique 98
+
 \end{code}
 
 Certain class operations from Prelude classes.  They get their own
@@ -1132,51 +1014,12 @@ bindMClassOpKey               = mkPreludeMiscIdUnique 113 -- (>>=)
 thenMClassOpKey                      = mkPreludeMiscIdUnique 114 -- (>>)
 returnMClassOpKey            = mkPreludeMiscIdUnique 117
 
--- MetaHaskell Extension, (text4 118) from Meta/work/gen.hs
-intLIdKey       = mkPreludeMiscIdUnique 118
-charLIdKey      = mkPreludeMiscIdUnique 119
-plitIdKey       = mkPreludeMiscIdUnique 120
-pvarIdKey       = mkPreludeMiscIdUnique 121
-ptupIdKey       = mkPreludeMiscIdUnique 122
-pconIdKey       = mkPreludeMiscIdUnique 123
-ptildeIdKey     = mkPreludeMiscIdUnique 124
-paspatIdKey     = mkPreludeMiscIdUnique 125
-pwildIdKey      = mkPreludeMiscIdUnique 126
-varIdKey        = mkPreludeMiscIdUnique 127
-conIdKey        = mkPreludeMiscIdUnique 128
-litIdKey        = mkPreludeMiscIdUnique 129
-appIdKey        = mkPreludeMiscIdUnique 130
-infixEIdKey     = mkPreludeMiscIdUnique 131
-lamIdKey        = mkPreludeMiscIdUnique 132
-tupIdKey        = mkPreludeMiscIdUnique 133
-doEIdKey        = mkPreludeMiscIdUnique 134
-compIdKey       = mkPreludeMiscIdUnique 135
-listExpIdKey    = mkPreludeMiscIdUnique 137
-condIdKey       = mkPreludeMiscIdUnique 138
-letEIdKey       = mkPreludeMiscIdUnique 139
-caseEIdKey      = mkPreludeMiscIdUnique 140
-infixAppIdKey   = mkPreludeMiscIdUnique 141
-sectionLIdKey   = mkPreludeMiscIdUnique 142
-sectionRIdKey   = mkPreludeMiscIdUnique 143
-guardedIdKey    = mkPreludeMiscIdUnique 144
-normalIdKey     = mkPreludeMiscIdUnique 145
-bindStIdKey     = mkPreludeMiscIdUnique 146
-letStIdKey      = mkPreludeMiscIdUnique 147
-noBindStIdKey   = mkPreludeMiscIdUnique 148
-parStIdKey      = mkPreludeMiscIdUnique 149
-fromIdKey       = mkPreludeMiscIdUnique 150
-fromThenIdKey   = mkPreludeMiscIdUnique 151
-fromToIdKey     = mkPreludeMiscIdUnique 152
-fromThenToIdKey = mkPreludeMiscIdUnique 153
-liftIdKey       = mkPreludeMiscIdUnique 154
-gensymIdKey     = mkPreludeMiscIdUnique 155
-returnQIdKey    = mkPreludeMiscIdUnique 156
-bindQIdKey      = mkPreludeMiscIdUnique 157
-funIdKey        = mkPreludeMiscIdUnique 158
-valIdKey        = mkPreludeMiscIdUnique 159
-protoIdKey      = mkPreludeMiscIdUnique 160
-matchIdKey      = mkPreludeMiscIdUnique 161
-clauseIdKey     = mkPreludeMiscIdUnique 162
+-- Recursive do notation
+mfixIdKey      = mkPreludeMiscIdUnique 118
+
+---------------- Template Haskell -------------------
+--     USES IdUniques 200-299
+-----------------------------------------------------
 \end{code}