On top of functions, it is sometimes useful to define operators for common operations. Like + and * for infix addition and multiplication.

operator (x: Int) + (y: Int) -> Int {
  int_add(x, y)

Operators are also curried function, and be called as a regular function by wrapping it in parentheses.

(+)(3, 5)


let add = (+)
add(3, 5)

Associativity & Precedence

When defining an operator, you can use the attributes #prec and #assoc to specify.

#assoc(left) #prec(higher(+))
operator (x: Int) * (y: Int) -> Int {
  int_mul(x, y)