Hi,
The reason behind that move (from Reasonml version 2 to 3), is that it feels more natural to JavaScript developers.
Since it's quite a new language and their main target are JS developers this kinda make sense to me but I agree with Viet, as a ML fan I don't like this new syntax.
Also I hope it won't confuse them about functional programming concepts. Partial application for example looks not clear at all that way:
let add = (x, y) => x + y;
let addFive = add(5);
let eleven = addFive(6);
let twelve = addFive(7);
In JavaScript add* functions clearly only take one argument.has very well received in the JavaScript community and it will lead to wider OCaml adoption
Such a terrible way to cave in to appear more JS-esque. I really hope OCaml community doesn't adopt this style because it's confusing, inelegant and superficial.
Viet.
On Mon, 11 Dec 2017 at 00:11, Yawar Amin <yawar.amin@gmail.com> wrote:
Hi Bob, you can find more details about the syntax change and discussion in this slightly outdated PR: https://github.com/facebook/reason/pull/1299
Long story short, you can write let add((m, n)) = m + n.
Note that the ReasonML project actually includes several long-time members of the OCaml community. I feel that the new syntax has very well received in the JavaScript community and it will lead to wider OCaml adoption. It's a win-win situation.
Regards,
Yawar
On Sun, Dec 10, 2017 at 1:12 PM, Robert Muller <robert.muller2@gmail.com> wrote:
The team developing ReasonML seems to be experimenting with concrete syntax in an effort to make it feel as familiar and natural as possible to JavaScript programmers. Seems like a good idea. But the present version seems to hardwire parentheses awkwardly for function definitions and calls. Parentheses are required for both function definitions and calls. So one writes
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.Bob Muller
--
Kind regards,
Viet
--
Sven SAULEAU
+33 6 28 69 51 44