## Infix symbols

Sequences of ``operator characters'', such as `<=>` or `!!`, are read as a single token from the infix-symbol or prefix-symbol class:

    infix-symbol:
          (= | < | > | @ | ^ | | | & | ~ | + | - | * | / | $ | %) {operator-char}

    prefix-symbol:
          (! | ?) {operator-char}

    operator-char:
          ! | $ | % | & | * | + | - | . | / | : | ; | < | = | > | ? | @ | ^ | | | ~

Tokens from these two classes generalize the built-in infix and prefix operators described in chapter 3:

    expr:
          ...
       |  prefix-symbol expr
       |  expr infix-symbol expr

    variable:
          ...
       |  prefix prefix-symbol
       |  prefix infix-symbol

No `#infix` directive (section 4.10) is needed to give infix symbols their infix status. The precedences and associativities of infix symbols in expressions are determined by their first character(s): symbols beginning with `**` have highest precedence (exponentiation), followed by symbols beginning with `*`, `/` or `%` (multiplication), then `+` and `-` (addition), then `@` and `^` (concatenation), then all others symbols (comparisons). The updated precedence table for expressions is shown below. We write ```*`...'' to mean ``any infix symbol starting with `*`''.

Construction or operator | Associativity
--- | ---
`!`...`?`... | --
`. .( .[` | --
function application | left
constructor application | --
`- -.` (prefix) | --
`**`... | right
`*`...`/`...`%`...`mod` | left
`+`...`-`... | left
`::` | right
`@`...`^`... | right
comparisons (`= == <` etc.), all other infix symbols | left
`not` | --
`& &&` | left
`or ||` | left
`,` | --
`<- :=` | right
`if` | --
`;` | right
`let match fun function try` | --

Some infix and prefix symbols are predefined in the default environment (see chapters 3 and 14 for a description of their behavior). The others are initially unbound and must be bound before use, with a `let` `prefix` infix-symbol `=` expr or `let` `prefix` prefix-symbol `=` expr binding.