Syntactic precedence

The reserved symbols ' and ! bind more tightly than function application, So 'f x is the same as (_ -> f) x and !x + y is the same as (x ()) + y.

These symbols bind less tightly than keywords that introduce blocks, so do x and 'let x are both the same as _ -> let x and !if b then p else q is the same as (if b then p else q) ().

Additional ' and ! combine in the following way:

  • do do syntacticPrecedence.x is the same as (_ -> (_ -> x)) or (_ _ -> x).
  • !!x is the same as x () ().
  • !'x and '!x are both the same as x.

You can use parentheses to precisely control how ' and ! get applied.