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

I'm afraid it probably won't, if they are used to the JavaScript syntax. Reasonml is also meant to be used in the web more than used through OCaml.

Sven.

On 11/12/2017 06:50, Viet Le wrote:
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