VM,
noV, tryV, maybeV, orElseV, fixV, localV, closedV, initV,
- cloneName, newExportedVar, newLocalVar, newDummyVar, newTyVar,
+ cloneName, cloneId,
+ newExportedVar, newLocalVar, newDummyVar, newTyVar,
Builtins(..), paDictTyCon, paDictDataCon,
builtin,
import OccName
import Name
import NameEnv
+import TysPrim ( intPrimTy )
import DsMonad
import PrelNames
, lengthPAVar :: Var
, replicatePAVar :: Var
, emptyPAVar :: Var
+ , liftingContext :: Var
}
paDictTyCon :: Builtins -> TyCon
replicatePAVar <- dsLookupGlobalId replicatePAName
emptyPAVar <- dsLookupGlobalId emptyPAName
+ liftingContext <- liftM (\u -> mkSysLocal FSLIT("lc") u intPrimTy)
+ newUnique
+
return $ Builtins {
parrayTyCon = parrayTyCon
, paClass = paClass
, lengthPAVar = lengthPAVar
, replicatePAVar = replicatePAVar
, emptyPAVar = emptyPAVar
+ , liftingContext = liftingContext
}
data GlobalEnv = GlobalEnv {
(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