summaryrefslogtreecommitdiff
path: root/src/Simplify.hs
diff options
context:
space:
mode:
authorTom Smeding <t.j.smeding@uu.nl>2025-04-18 13:32:52 +0200
committerTom Smeding <t.j.smeding@uu.nl>2025-04-18 13:32:52 +0200
commita624136738fb1ad3bf801723b9afbf1132fad7f0 (patch)
tree010969bfb2cf21ed9ba19b234f132f52e5275e3b /src/Simplify.hs
parent55fca0c5c533625262c103be1b673011ec41f2d7 (diff)
Some progress with accumMap
Diffstat (limited to 'src/Simplify.hs')
-rw-r--r--src/Simplify.hs10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/Simplify.hs b/src/Simplify.hs
index f5b7d15..cb835aa 100644
--- a/src/Simplify.hs
+++ b/src/Simplify.hs
@@ -100,12 +100,20 @@ simplify' = \case
EMaybe _ e1 _ ENothing{} -> acted $ simplify' e1
EMaybe _ _ e1 (EJust _ e2) -> acted $ simplify' $ ELet ext e2 e1
- -- let floating to facilitate beta reduction
+ -- let floating
EFst _ (ELet _ rhs body) -> acted $ simplify' (ELet ext rhs (EFst ext body))
ESnd _ (ELet _ rhs body) -> acted $ simplify' (ELet ext rhs (ESnd ext body))
ECase _ (ELet _ rhs body) e1 e2 -> acted $ simplify' (ELet ext rhs (ECase ext body (weakenExpr (WCopy WSink) e1) (weakenExpr (WCopy WSink) e2)))
EIdx0 _ (ELet _ rhs body) -> acted $ simplify' (ELet ext rhs (EIdx0 ext body))
EIdx1 _ (ELet _ rhs body) e -> acted $ simplify' (ELet ext rhs (EIdx1 ext body (weakenExpr WSink e)))
+ EAccum _ t p e1 (ELet _ rhs body) acc ->
+ acted $ simplify' $
+ ELet ext rhs $
+ EAccum ext t p (weakenExpr WSink e1) body (weakenExpr WSink acc)
+
+ -- let () = e in () ~> e
+ ELet _ e1 (ENil _) | STNil <- typeOf e1 ->
+ acted $ simplify' e1
-- projection down-commuting
EFst _ (ECase _ e1 e2 e3) ->