summaryrefslogtreecommitdiff
path: root/src/Analysis/Identity.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Analysis/Identity.hs')
-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)