cloneName, cloneId,
newExportedVar, newLocalVar, newDummyVar, newTyVar,
- Builtins(..), paDictTyCon, paDictDataCon,
+ Builtins(..),
builtin,
GlobalEnv(..),
- setInstEnvs,
+ setFamInstEnv,
readGEnv, setGEnv, updGEnv,
LocalEnv(..),
lookupVar, defGlobalVar,
lookupTyCon, defTyCon,
lookupDataCon, defDataCon,
- lookupTyConPA, defTyConPA,
+ lookupTyConPA, defTyConPA, defTyConRdrPAs,
lookupTyVarPA, defLocalTyVar, defLocalTyVarWithPA, localTyVars,
- lookupInst, lookupFamInst
+ {-lookupInst,-} lookupFamInst
) where
#include "HsVersions.h"
import HscTypes
import CoreSyn
-import Class
import TyCon
import DataCon
import Type
data Builtins = Builtins {
parrayTyCon :: TyCon
- , paClass :: Class
+ , paTyCon :: TyCon
+ , paDataCon :: DataCon
, closureTyCon :: TyCon
, mkClosureVar :: Var
, applyClosureVar :: Var
, liftingContext :: Var
}
-paDictTyCon :: Builtins -> TyCon
-paDictTyCon = classTyCon . paClass
-
-paDictDataCon :: Builtins -> DataCon
-paDictDataCon = classDataCon . paClass
-
initBuiltins :: DsM Builtins
initBuiltins
= do
parrayTyCon <- dsLookupTyCon parrayTyConName
- paClass <- dsLookupClass paClassName
+ paTyCon <- dsLookupTyCon paTyConName
+ let paDataCon = case tyConDataCons paTyCon of [dc] -> dc
closureTyCon <- dsLookupTyCon closureTyConName
mkClosureVar <- dsLookupGlobalId mkClosureName
return $ Builtins {
parrayTyCon = parrayTyCon
- , paClass = paClass
+ , paTyCon = paTyCon
+ , paDataCon = paDataCon
, closureTyCon = closureTyCon
, mkClosureVar = mkClosureVar
, applyClosureVar = applyClosureVar
, global_rdr_env = rdr_env
}
-setInstEnvs :: InstEnv -> FamInstEnv -> GlobalEnv -> GlobalEnv
-setInstEnvs l_inst l_fam_inst genv
- | (g_inst, _) <- global_inst_env genv
- , (g_fam_inst, _) <- global_fam_inst_env genv
- = genv { global_inst_env = (g_inst, l_inst)
- , global_fam_inst_env = (g_fam_inst, l_fam_inst) }
+setFamInstEnv :: FamInstEnv -> GlobalEnv -> GlobalEnv
+setFamInstEnv l_fam_inst genv
+ = genv { global_fam_inst_env = (g_fam_inst, l_fam_inst) }
+ where
+ (g_fam_inst, _) = global_fam_inst_env genv
emptyLocalEnv = LocalEnv {
local_vars = emptyVarEnv
defTyConPA tc pa = updGEnv $ \env ->
env { global_pa_funs = extendNameEnv (global_pa_funs env) (tyConName tc) pa }
+defTyConRdrPAs :: [(Name, RdrName)] -> VM ()
+defTyConRdrPAs ps
+ = do
+ pas <- mapM lookupRdrVar rdr_names
+ updGEnv $ \env ->
+ env { global_pa_funs = extendNameEnvList (global_pa_funs env)
+ (zip tcs pas) }
+ where
+ (tcs, rdr_names) = unzip ps
+
lookupTyVarPA :: Var -> VM (Maybe CoreExpr)
lookupTyVarPA tv = readLEnv $ \env -> lookupVarEnv (local_tyvar_pa env) tv
-- instances head (i.e., no flexi vars); for details for what this means,
-- see the docs at InstEnv.lookupInstEnv.
--
+{-
lookupInst :: Class -> [Type] -> VM (DFunId, [Type])
lookupInst cls tys
= do { instEnv <- getInstEnv
where
isRight (Left _) = False
isRight (Right _) = True
+-}
-- Look up the representation tycon of a family instance.
--