Simplifying Lambda Syntax

Evaluating lambda functions requires using lots of brackets, which can be tedious and are a major source of error for evaluating expressions by hand. To simplify expressions, you can omit brackets when it is clear what the intention of the function is. Particularly, a function application can omit the brackets surrounding each individual parameter and assume the function is applied to the nearest argument. So, instead of expressing a function of three arguments as

$$ (((f : a1) : a2) : a3) $$

We can write

$$ f : a1 : a2 : a3 $$

A second simplification of notation is defining functions. Instead of defining a function using the full lambda syntax already described, we can drop the \(\lambda\) symbol and move any variables of the function definition to the left of the \(=\) sign. This means a function definition like

$$ \text{def } : f = \lambda\langle name \rangle. \langle expression \rangle $$

can be expressed as

$$ \text{def} : f \langle name \rangle = \langle expression \rangle $$

Using this syntactic sugar, we can express common functions like identity in a simplified format.

$$ \text{def} : identity = \lambda x.x $$


$$ \text{def} : identity : x = x $$

You will see this simplified syntax used to express lambda expressions more succinctly, especially when we start building more complex lambda expressions that rely on conditional logic or recursion.

See also