<Prog> ::= <LetDecl>*
<FunDecl>+
-<LetDecl> ::= 'Let' <type>? <id> '=' <Expr> ';'
+<LetDecl> ::= 'Let' <type> <id> '=' <Expr> ';'
<FunDecl> ::= <id> '(' <Type>* ')' ['::' <FunType] '{' <VarDecl>* <Stmt>+ '}'
<FunType> ::= <VoidType> ['->' <FunType>]
| '(' <FunType> ')'