diff options
Diffstat (limited to 'src/Simplify.hs')
-rw-r--r-- | src/Simplify.hs | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/Simplify.hs b/src/Simplify.hs index 3ac68ed..2007585 100644 --- a/src/Simplify.hs +++ b/src/Simplify.hs @@ -66,6 +66,8 @@ simplify' = \case -- TODO: array indexing (index of build, index of fold) + -- TODO: beta rules for maybe + -- TODO: constant folding for operations -- TODO: accum of zero, plus of zero @@ -79,6 +81,9 @@ simplify' = \case EInl _ t e -> EInl ext t (simplify' e) EInr _ t e -> EInr ext t (simplify' e) ECase _ e a b -> ECase ext (simplify' e) (simplify' a) (simplify' b) + ENothing _ t -> ENothing ext t + EJust _ e -> EJust ext (simplify' e) + EMaybe _ a b e -> EMaybe ext (simplify' a) (simplify' b) (simplify' e) EConstArr _ n t v -> EConstArr ext n t v EBuild1 _ a b -> EBuild1 ext (simplify' a) (simplify' b) EBuild _ n a b -> EBuild ext n (simplify' a) (simplify' b) @@ -118,6 +123,9 @@ hasAdds = \case EInl _ _ e -> hasAdds e EInr _ _ e -> hasAdds e ECase _ e a b -> hasAdds e || hasAdds a || hasAdds b + ENothing _ _ -> False + EJust _ e -> hasAdds e + EMaybe _ a b e -> hasAdds a || hasAdds b || hasAdds e EConstArr _ _ _ _ -> False EBuild1 _ a b -> hasAdds a || hasAdds b EBuild _ _ a b -> hasAdds a || hasAdds b @@ -145,6 +153,7 @@ checkAccumInScope = \case SNil -> False check STNil = False check (STPair s t) = check s || check t check (STEither s t) = check s || check t + check (STMaybe t) = check t check (STArr _ t) = check t check (STScal _) = False check STAccum{} = True |