Ternary Operators

Ternary Operators are a special form of infix operators that have three operands and two operators. They can be declared by adding a second symbol to an infix operator declaration:
infix operator ? : { precedence 100 }
While ternary operators can define a precedence, they may not have an associativity attribute. The associativity can be viewed as if it was left for the first operator and right for the second operator. The following example illustrates how ternary operator expressions are grouped:
a | b ? c + d : e * f
(a | b) ? (c + d) : (e * f)
a ? b ? c : d : e
a ? (b ? c : d) : e
a ? b : c ? d : e
a ? b : (c ? d : e)
While the standard library only defines the Ternary Conditional Operator ? :, you can define your own custom ternary operators with any two symbols.