summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Smeding <t.j.smeding@uu.nl>2025-01-27 15:08:22 +0100
committerTom Smeding <t.j.smeding@uu.nl>2025-01-27 15:08:22 +0100
commit817cd3c75a2bbbbb355ac33fc7ca3ad8a16bdc92 (patch)
tree2d4d7ae8860965b8139dc894b60cd7be946932f6
parent88fae8c2914b805a733b71de58ab672124e6069c (diff)
Complete identity analysis
-rw-r--r--src/Analysis/Identity.hs35
1 files changed, 33 insertions, 2 deletions
diff --git a/src/Analysis/Identity.hs b/src/Analysis/Identity.hs
index e481a77..9087143 100644
--- a/src/Analysis/Identity.hs
+++ b/src/Analysis/Identity.hs
@@ -253,6 +253,37 @@ idana env = \case
res <- VIThing <$> genId
pure (res, ECustom res t1 t2 t3 e1' e2' e3' e4' e5')
- -- EWith e1 e2
+ EWith _ e1 e2 -> do
+ (_, e1') <- idana env e1
+ x1 <- VIAccum <$> genId
+ (v2, e2') <- idana (x1 `SCons` env) e2
+ x2 <- VIThing <$> genId
+ let res = VIPair v2 x2
+ pure (res, EWith res e1' e2')
+
+ EAccum _ i e1 e2 e3 -> do
+ (_, e1') <- idana env e1
+ (_, e2') <- idana env e2
+ (_, e3') <- idana env e3
+ res <- VIThing <$> genId
+ pure (res, EAccum res i e1' e2' e3')
+
+ EZero _ t -> do
+ res <- VIThing <$> genId
+ pure (res, EZero res t)
- _ -> _
+ EPlus _ t e1 e2 -> do
+ (_, e1') <- idana env e1
+ (_, e2') <- idana env e2
+ res <- VIThing <$> genId
+ pure (res, EPlus res t e1' e2')
+
+ EOneHot _ t i e1 e2 -> do
+ (_, e1') <- idana env e1
+ (_, e2') <- idana env e2
+ res <- VIThing <$> genId
+ pure (res, EOneHot res t i e1' e2')
+
+ EError _ t s -> do
+ res <- VIThing <$> genId
+ pure (res, EError res t s)