Associativity plays a role when multiple operators are chained. It controls the order of grouping operands to operators with the same precedence.
= being with Right associativity means that a = b = 10 will be evaluated as (a = (b = 10)) and not as ((a = b) = 10).
- is also left associative, meaning that 5 - 4 - 3 is evaluated as ((5 - 4) - 3) == -2. If it was right associative it would have been evaluated as (5 - (4 - 3)) == 4.
When the operator is used a single time, the associativity does not play a role – 5 - 3 == 2 no matter if - is left or right associative
<- is left associative not only in the docs, but also in the parser. So there is no error in the documentation.
I was not able to actually come up with an example where multiple <- are chained, something like this does not work:
with a <- b <- 10 do
{a, b}
end
If I had to guess before looking it up, I would have guessed that <- is non-associative. Example for non associative operator is the unary not. A single not true is valid, but chaining multiple nots is not: not true not false is a syntax error.
In these examples of with and for the comma , separates the expressions. The comma itself is left associative, which is what controls the order of evaluation.
You can check that by replacing the left associative <- with the right associative = and still being able to use the result of the previous results:
with a = 5,
b = a + 10,
c = b + 20 do
{a, b, c}
end
# => {5, 15, 35}