State of currying-PR

I have found this PR from years ago:
https://github.com/JuliaLang/julia/pull/24990

I would love this feature, and I am not alone. Does anyone have a status/summary on this? The discussion is too technical at several points for me to follow.

It seems like perfect is being the enemy of the good, and that is such a shame for such a highly-requested feature. Would it be possible to reach a consensus based on some type of voting?

12 Likes

I also cannot speak for all the technical language discussions in that PR but as a user i would love that feature too. So IMHO this would enhance my programming experience in Julia. :slightly_smiling_face:

The end of the discussion mentions a test PR by Simeon (https://github.com/JuliaLang/julia/pull/40860). So, work is being done but it looks like this functionality would break many packages

The original version of the functionality in the PR (a Scala-like ā€œtight-bindingā€ syntax) was not breaking because it did not change the AST (and it only affected code that is currently an error).

The thing that is breaking is to try to implement a more expansive binding of the underscore by inserting new AST nodes.

6 Likes

Iā€™m definitely in favor of the PR in its original version. Then maybe in 2.0 we can get rid of the special currying methods for >, ==, startswith, etc.

1 Like

Came also across this PR the other day. Certainly a feature I would love to see. More so since the base R pipe which has been added in R 4.1 will supposedly support an underscore operator with the same functionality in R 4.2 (would be neat to have roughly the same base piping functionalities in both languages without extra packages).

4 Likes

Do you have a link for this? It would be nice to see what semantics they chose.

I was looking for it, but couldnā€™t find it (but I also have heard, and not read about it iirc). I spent some more time checking and so far no changes to the pipe implementation have been made in 4.2 dev if I can tell correctly (usually I am not that deep into language internals). https://github.com/r-devel/r-svn/blob/master/src/main/gram.c

Edit: Also on svn https://svn.r-project.org/R/trunk/src/main/gram.c

If I get any details on this I surely will remember to post them here though.

1 Like

Maybe some more info pops up there as well.

2 Likes

if itā€™s breaking then maybe that PR should get a 2.0 milestone? would love to have this feature too.

1 Like

It seems R has settled on a placeholder implementation for the new Base.Pipe (leaving this here because i promised earlier):

and

Maybe the folks who have discussed the related Julia PR find this useful?

4 Likes

Is there still interest in this? Since it was removed from the 1.x milestone 9 days ago.

I think itā€™d be an absolutely fantastic feature, improving readability and elegance of code. To me personally, itā€™s also a big step towards julia really feeling like a functional language.

4 Likes

Itā€™s hard to work on it without getting clear buy-in from the core devs on the semantics.

Personally, I favor the Scala-like ā€œtight-bindingā€ semantics of the original PR, which is backwards-compatible, simple to explain and reason about, and gives clear improvements in simple cases (while for everything else you can use ->).

Every attempt to devise a more expansive DWIM syntax (to handle compound expressions like 1 + 2_) led to confusion, breakage, and ultimately ground progress to a halt.

20 Likes