summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/AST/UnMonoid.hs7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/AST/UnMonoid.hs b/src/AST/UnMonoid.hs
index d498aaa..ef01bf8 100644
--- a/src/AST/UnMonoid.hs
+++ b/src/AST/UnMonoid.hs
@@ -60,7 +60,7 @@ unMonoid = \case
EError _ t s -> EError ext t s
zero :: SMTy t -> Ex env (ZeroInfo t) -> Ex env t
-zero SMTNil _ = ENil ext
+zero SMTNil e = elet e $ ENil ext
zero (SMTPair t1 t2) e =
ELet ext e $ EPair ext (zero t1 (EFst ext (EVar ext (typeOf e) IZ)))
(zero t2 (ESnd ext (EVar ext (typeOf e) IZ)))
@@ -74,7 +74,7 @@ zero (SMTScal t) _ = case t of
STF64 -> EConst ext STF64 0.0
deepZero :: SMTy t -> Ex env (DeepZeroInfo t) -> Ex env t
-deepZero SMTNil _ = ENil ext
+deepZero SMTNil e = elet e $ ENil ext
deepZero (SMTPair t1 t2) e =
ELet ext e $ EPair ext (deepZero t1 (EFst ext (EVar ext (typeOf e) IZ)))
(deepZero t2 (ESnd ext (EVar ext (typeOf e) IZ)))
@@ -95,7 +95,8 @@ deepZero (SMTScal t) _ = case t of
STF64 -> EConst ext STF64 0.0
plus :: SMTy t -> Ex env t -> Ex env t -> Ex env t
-plus SMTNil _ _ = ENil ext
+-- don't destroy the effects!
+plus SMTNil a b = elet a $ elet (weakenExpr WSink b) $ ENil ext
plus (SMTPair t1 t2) a b =
let t = STPair (fromSMTy t1) (fromSMTy t2)
in ELet ext a $