let incr(n) = n + 1 and incr(5)
but not
let incr n = n + 1 or incr 5
Fair enough, but for multi-argument functions the parser seems to unroll the parenthesized items (both parameters & arguments) to leave curried functions. E.g.,
let add(m, n) = m + n or equivalently let add = (m, n) => m + n
then add(5, 3) is 8 as one would expect. But the (m, n) in let add(m, n) = ... isn't a pattern matching a pair, it's the JS-style sequence of input parameters and the definition unrolls to let add = (m) => (n) => ... . So add(5) : int -> int and all three of add(5, 3), add(5)(3) and { let add5 = add(5); add5(3) } are 8. There's probably a way to write an add function of type int * int -> int, but I don't know how to write it.
I'm wondering what the OCaml community makes of this. I find it awkward.