Keywords that introduce blocks bind more tightly than function application. So `f let x`

is the same as `f (let x)`

and `f if b then p else q`

is the same as `f (if b then p else q)`

.

Block keywords bind more tightly than delayed computations syntax. So `'let x''`

is the same as `_ -> let x`

and `!if b then p else q`

is the same as `(if b then p else q) ()`

.

Blocks eagerly consume expressions, so `if b then p else q + r`

is the same as `if b then p else (q + r)`

.