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 asx () ()
.!'x
and'!x
are both the same asx
.
You can use parentheses to precisely control how '
and !
get applied.