::= + ::= '(' * ')' ['::' * + '}' ::= ['->' ] | '(' ')' ::= 'if' '(' ')' '{' * '}' ['else' '{' * '}'] | 'while' '(' ')' '{' * '}' | '=' ';' | ';' | 'return' [] ';' ::= '=' ';' ::= [':' ] ::= ['||' ] ::= ['&&' ] ::= [('==' | '<' | '>' | '<=' | '>=' | '!=') ] ::= (('+' | '-') )* ::= (['*' | '/' | '%'] )* ::= | | | 'False' | 'True' | '(' ')' | | '[]' | '(' ',' ')' ::= ('.' ('hd'|'tl'|'fst'|'snd))* ::= ['(' + ')'] ::= [',' ActArgs] ::= 'Int' | 'Bool' | 'Char' | '(' Type ',' Type ')' | '[' Type ']' | ::= 'Void' | Type