Use applicative style
Implement Rewritable for AST
Use rewrite rules for the AST