simplify expr = Uniplate.rewrite expr \case Add (Const a) (Const b) -> Const (a + b) Mult (Const a) (Const b) -> Const (a * b) Mult (Const 1) b -> b Mult (Const 0) _ -> Const 0 Mult a (Const 1) -> a Mult _ (Const 0) -> Const 0 Add (Const 0) b -> b Add a (Const 0) -> a other -> other