import CoreSyn
import Class
import TyCon
+import DataCon
import Type
import Var
import VarEnv
--
, global_tycon_pa :: NameEnv CoreExpr
+ -- Mapping from DataCons to their vectorised versions
+ --
+ , global_datacons :: NameEnv DataCon
+
-- External package inst-env & home-package inst-env for class
-- instances
--
, global_exported_vars = emptyVarEnv
, global_tycons = mapNameEnv snd $ vectInfoTyCon info
, global_tycon_pa = emptyNameEnv
+ , global_datacons = mapNameEnv snd $ vectInfoDataCon info
, global_inst_env = instEnvs
, global_fam_inst_env = famInstEnvs
, global_bindings = []
updVectInfo :: GlobalEnv -> TypeEnv -> VectInfo -> VectInfo
updVectInfo env tyenv info
= info {
- vectInfoVar = global_exported_vars env
- , vectInfoTyCon = tc_env
+ vectInfoVar = global_exported_vars env
+ , vectInfoTyCon = tc_env
+ , vectInfoDataCon = dc_env
}
where
tc_env = mkNameEnv [(tc_name, (tc,tc'))
, let tc_name = tyConName tc
, Just tc' <- [lookupNameEnv (global_tycons env) tc_name]]
+ dc_env = mkNameEnv [(dc_name, (dc,dc'))
+ | dc <- typeEnvDataCons tyenv
+ , let dc_name = dataConName dc
+ , Just dc' <- [lookupNameEnv (global_datacons env) dc_name]]
+
data VResult a = Yes GlobalEnv LocalEnv a | No
newtype VM a = VM { runVM :: Builtins -> GlobalEnv -> LocalEnv -> DsM (VResult a) }