VM,
noV, tryV, maybeV, orElseV, fixV, localV, closedV, initV,
- cloneName, newExportedVar, newLocalVar, newDummyVar, newTyVar,
+ cloneName, cloneId,
+ newExportedVar, newLocalVar, newDummyVar, newTyVar,
Builtins(..), paDictTyCon, paDictDataCon,
builtin,
--
, global_datacons :: NameEnv DataCon
+ -- Mapping from TyCons to their PA dfuns
+ --
+ , global_pa_funs :: NameEnv Var
+
-- External package inst-env & home-package inst-env for class
-- instances
--
(tyConName funTyCon) (closureTyCon bi)
, global_datacons = mapNameEnv snd $ vectInfoDataCon info
+ , global_pa_funs = mapNameEnv snd $ vectInfoPADFun info
, global_inst_env = instEnvs
, global_fam_inst_env = famInstEnvs
, global_bindings = []
vectInfoVar = global_exported_vars env
, vectInfoTyCon = mk_env typeEnvTyCons global_tycons
, vectInfoDataCon = mk_env typeEnvDataCons global_datacons
+ , vectInfoPADFun = mk_env typeEnvTyCons global_pa_funs
}
where
mk_env from_tyenv from_env = mkNameEnv [(name, (from,to))
(nameSrcSpan name)
| otherwise = mkSystemName u occ_name
+cloneId :: (OccName -> OccName) -> Id -> Type -> VM Id
+cloneId mk_occ id ty
+ = do
+ name <- cloneName mk_occ (getName id)
+ let id' | isExportedId id = Id.mkExportedLocalId name ty
+ | otherwise = Id.mkLocalId name ty
+ return id'
+
newExportedVar :: OccName -> Type -> VM Var
newExportedVar occ_name ty
= do