In JS, exponentiation operator is right-associative: a ** b ** c
is equal to a ** (b ** c)
.
In ReScript is left-associative:
Example:
let a = 2. ** 3. ** 2.
Compile to:
var a = Math.pow(Math.pow(2, 3), 2);
Result: 64
Node:
> 2 ** 3 ** 2
> 512
Is this the expected behavior?
Why not compile to Math.pow(2, Math.pow(3, 2))
?
I think binary operators are parsed as left-associative. E.g. 1-4-5
.
Not sure if intentional for exponentiation.
Seems like a bug. It should be right associative - along with the negate operator
I.e. 2. ** -3. ** 2
should be Math.pow(2, -Math.pow(3, 2))
In v11 the operator **
will be right-associative.
2 Likes