top-level ::= ident ':' expr | ident '=' expr | '--' text expr ::= ('\' | 'λ') ident ':' expr '.' expr | expr expr | '(' ident ':' expr ')' '->' expr | '(' expr ')' '->' expr | '*' | ident