summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <tom@tomsmeding.com>2025-03-01 10:15:42 +0100
committerTom Smeding <tom@tomsmeding.com>2025-03-01 10:15:42 +0100
commit65630468ccebeda0b0c37dfb8872e0f4ca2fdeae (patch)
tree99397ca1da677f4fdf2735c0cc92180e5ba8343a
parenta018bcf4393a4ddac7a76ca86b3409a669e59f48 (diff)
simplify: Halfway beta-reduce product projections in effectful context
-rw-r--r--src/Simplify.hs8
1 files changed, 6 insertions, 2 deletions
diff --git a/src/Simplify.hs b/src/Simplify.hs
index 673b58c..fb858e7 100644
--- a/src/Simplify.hs
+++ b/src/Simplify.hs
@@ -60,8 +60,12 @@ simplify' = \case
weakenExpr (WCopy WSink) (snd (simplify' b))
-- beta rules for products
- EFst _ (EPair _ e e') | not (hasAdds e') -> acted $ simplify' e
- ESnd _ (EPair _ e' e) | not (hasAdds e') -> acted $ simplify' e
+ EFst _ (EPair _ e e')
+ | not (hasAdds e') -> acted $ simplify' e
+ | otherwise -> acted $ simplify' $ ELet ext e' (weakenExpr WSink e)
+ ESnd _ (EPair _ e' e)
+ | not (hasAdds e') -> acted $ simplify' e
+ | otherwise -> acted $ simplify' $ ELet ext e' (weakenExpr WSink e)
-- beta rules for coproducts
ECase _ (EInl _ _ e) rhs _ -> acted $ simplify' (ELet ext e rhs)