diff options
author | Tom Smeding <t.j.smeding@uu.nl> | 2025-01-27 15:08:22 +0100 |
---|---|---|
committer | Tom Smeding <t.j.smeding@uu.nl> | 2025-01-27 15:08:22 +0100 |
commit | 817cd3c75a2bbbbb355ac33fc7ca3ad8a16bdc92 (patch) | |
tree | 2d4d7ae8860965b8139dc894b60cd7be946932f6 | |
parent | 88fae8c2914b805a733b71de58ab672124e6069c (diff) |
Complete identity analysis
-rw-r--r-- | src/Analysis/Identity.hs | 35 |
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) |