diff options
author | Tom Smeding <tom@tomsmeding.com> | 2024-12-06 19:54:23 +0100 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2024-12-06 19:54:23 +0100 |
commit | 40a0abca1cedcdd930bb33d1874b7922443e5a8c (patch) | |
tree | 951e5c4dc3421bc57cabb677545ed84057899d20 | |
parent | 4c96a1ab3d2bd862dde977aae705a5c731d239d2 (diff) |
Simplify: Reduce plus of literals
-rw-r--r-- | src/Simplify.hs | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/Simplify.hs b/src/Simplify.hs index 1646213..6303716 100644 --- a/src/Simplify.hs +++ b/src/Simplify.hs @@ -101,6 +101,27 @@ simplify' = \case EPlus _ e (EZero _) -> acted $ simplify' e EOneHot _ SZ _ e -> acted $ simplify' e + -- equations for plus + EPlus STNil _ _ -> (Any True, ENil ext) + + EPlus (STPair t1 t2) (EJust _ (EPair _ a1 b1)) (EJust _ (EPair _ a2 b2)) -> + acted $ simplify' $ EJust ext (EPair ext (EPlus t1 a1 a2) (EPlus t2 b1 b2)) + EPlus STPair{} ENothing{} e -> acted $ simplify' e + EPlus STPair{} e ENothing{} -> acted $ simplify' e + + EPlus (STEither t1 _) (EJust _ (EInl _ dt2 a1)) (EJust _ (EInl _ _ a2)) -> + acted $ simplify' $ EJust ext (EInl ext dt2 (EPlus t1 a1 a2)) + EPlus (STEither _ t2) (EJust _ (EInr _ dt1 b1)) (EJust _ (EInr _ _ b2)) -> + acted $ simplify' $ EJust ext (EInr ext dt1 (EPlus t2 b1 b2)) + EPlus STEither{} ENothing{} e -> acted $ simplify' e + EPlus STEither{} e ENothing{} -> acted $ simplify' e + + EPlus (STMaybe t) (EJust _ e1) (EJust _ e2) -> + acted $ simplify' $ EJust ext (EPlus t e1 e2) + EPlus STMaybe{} ENothing{} e -> acted $ simplify' e + EPlus STMaybe{} e ENothing{} -> acted $ simplify' e + + -- fallback recursion EVar _ t i -> pure $ EVar ext t i ELet _ a b -> ELet ext <$> simplify' a <*> simplify' b EPair _ a b -> EPair ext <$> simplify' a <*> simplify' b |