Operators are functions that take two arguments and are called with the name of the function between its arguments, as in 4 Nat.* 3. We call this kind of syntax, "infix notation". You can write your own operators in Unison with a few special syntax conventions.
Operator names in Unison can only be comprised of the characters !$%^&*-=+<>~\\/|:. So ==> is a valid operator name but =hi!> is not.
You can wrap your operator in parenthesis followed by two arguments to define it.
(^) x y = Nat.pow x yOr you can define the operator with the symbols between its arguments:
x ^ y = Nat.pow x yWithout the parenthesis or infix definition, the UCM would fail to parse ^ as a valid function definition.
Calling these functions can be done with the infix notation, 2 ^ 3, or with the regular function application syntax, ^ 2 3.
You might want your operator to be prefixed with a namespace so it's located in a specific place in your codebase. Prepend the namespace inside the parentheses:
(aNamespace.^) x y = Nat.pow x yOr add it in between the arguments:
x aNamespace.^ y = Nat.pow x y