Reason - general function syntax discussion

I’m quoting @let-def from discord:

  1. There is no isomorphism between (A*B)=>C and A=>B=>C in OCaml (where * is product and => is effectful arrow). This leads to trick such as https://ocaml.janestreet.com/ocaml-core/latest/doc/core/Std/Staged.mod/.
    OCaml designers also agree that it was a mistake to not distinguish syntactically between partial application and “normal application”. That’s why for instance there is no partial application at all with value constructors.
    So what you consider a core feature is disapproved by language author and Jane Street.
    Partial applications is inefficient to compile and has a tricky semantics (because of effects). It is so tricky to compile that the compiler actually approximates it: when using labelled arguments, the compiler takes some freedom with the semantics to avoid a combinatorial explosion.
  2. The PR doesn’t remove anything at all, it just put lipsticks on this design (or mistake depending on your point of view).
  3. However my message showing possible semantics changes introduces real differences. But that’s not what is going to happen. Instead, what is likely to happen is algebraic effects (with multicore).
    This version will distinguish effectful and pure arrows at the type level, so the new syntax will become more relevant at that point (with the necessary plumbing in the frontend, it could help catching actual bugs).

Which is basically what he said on github