In tulip, a function call is expressed as a sequence of expressions, with parentheses appearing freely:
f arg1 (arg2) (g arg3)
If a function receives fewer arguments than its arity, the result is a curried function expecting the remaining arguments. If it receives more, it consumes its arity and calls the return value with the rest. The order of evaluation for a function call is:
- The function expression is evaluated
- Each argument is evaluated