diff options
author | Tom Smeding <tom@tomsmeding.com> | 2025-06-18 13:56:42 +0200 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2025-06-18 13:56:42 +0200 |
commit | 48e4977f3e0a88ff24410987b80bf6003c45dfb7 (patch) | |
tree | 251485afce576a58596cc841bacdab4b3c42c56a | |
parent | 6d25e87e6f703395038d23aaff225aa502283519 (diff) |
Don't destroy effects in UnMonoid
-rw-r--r-- | src/AST/UnMonoid.hs | 7 |
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 $ |