#lang plait
#| BNF for the AE language:
<AE> ::= <num>
| { + <AE> <AE> }
| { - <AE> <AE> }
| { * <AE> <AE> }
| { / <AE> <AE> }
|#
;; AE abstract syntax trees
(define-type AE
[Num (val : Number)]
[Add (l : AE) (r : AE)]
[Sub (l : AE) (r : AE)]
[Mul (l : AE) (r : AE)]
[Div (l : AE) (r : AE)])