Lower precedence means a stronger binding; ie. this list is sorted from strongest to weakest binding, and in the case of equal precedence between two operators, the associativity decides the binding.
Prec | Abbreviation | Example | Assoc | Description |
---|---|---|---|---|
1 | SELECT | e . attrpath [or def] |
none | Select attribute denoted by the attribute path attrpath from set e . (An attribute path is a dot-separated list of attribute names.) If the attribute doesn’t exist, return default if provided, otherwise abort evaluation. |
2 | APP | e1 e2 |
left | Call function e1 with argument e2 . |
3 | NEG | -e |
none | Numeric negation. |
4 | HAS_ATTR | e ? attrpath |
none | Test whether set e contains the attribute denoted by attrpath ; return true or false. |
5 | CONCAT | e1 ++ e2 |
right | List concatenation. |
6 | MUL | e1 * e2 |
left | Numeric multiplication. |
6 | DIV | e1 / e2 |
left | Numeric division. |
7 | ADD | e1 + e2 |
left | Numeric addition, or string concatenation. |
7 | SUB | e1 - e2 |
left | Numeric subtraction. |
8 | NOT | !e |
left | Boolean negation. |
9 | UPDATE | e1 // e2 |
right | Return a set consisting of the attributes in e1 and e2 (with the latter taking precedence over the former in case of equally named attributes). |
10 | LT | e1 < e2 |
left | Less than. |
10 | LTE | e1 <= e2 |
left | Less than or equal. |
10 | GT | e1 > e2 |
left | Greater than. |
10 | GTE | e1 >= e2 |
left | Greater than or equal. |
11 | EQ | e1 == e2 |
none | Equality. |
11 | NEQ | e1 != e2 |
none | Inequality. |
12 | AND | e1 && e2 |
left | Logical AND. |
13 | OR | e1 || e2 |
left | Logical OR. |
14 | IMPL | e1 -> e2 |
none | Logical implication (equivalent to !e1 || e2 ). |
I didn't notice any missing operators, but I did port over the precedence info in to NixOS/nix#3056