term := Var | "\\" Var "." term @ label="abstraction" | term " " term @ label="application" | "(" term ")" @ hidden=True simple_type := Var | simple_type "->" simple_type @ label="arrow" assoc "application" left assoc "arrow" right