From 817cd3c75a2bbbbb355ac33fc7ca3ad8a16bdc92 Mon Sep 17 00:00:00 2001 From: Tom Smeding Date: Mon, 27 Jan 2025 15:08:22 +0100 Subject: Complete identity analysis --- src/Analysis/Identity.hs | 35 +++++++++++++++++++++++++++++++++-- 1 file 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) -- cgit v1.2.3-70-g09d2