:: Expression
= Lit Value
| Var [Char]
+ | Tuple Expression Expression
| App Expression Expression
| Lambda [Char] Expression
| Let [([Char], Expression)] Expression
:: Value
= Int Int
| Bool Bool
+ | ** infix 9 Expression Expression
| Lambda` [Char] Expression
| Builtin (Expression -> Eval Expression)