Does it reorder? I would expect these two to be equivalent
and
let x = f (g 1) (h ()) in
let f2 = f (g 1) in
let x = f (h ()) in
and in the second case the order is clearly g before h.
If the order is indeed to evaluate the last argument first then
let t1 = h () in
let t2 = g 1 in
let x = f t2 t1 in
let y = t2 in
x + y
It's not hard to preserve the order whatever it may be.