Re:Show HN: Omg-Curry – JavaScript currying library
by ufo on Monday August 10, 2020 @06:02PM
(#24114546)
I had mixed results in the past when I tried to use currying in Javascript. The stack traces were cluttered by references to the currying function and it also masked bugs if you forgot to pass an argument. Without currying, if you pass less arguments than the function expects then you usually get an error right away complaining that the argument is undefined. However, if the function is curried then it silently succeeds. You only notice the problem later, when you try to use the return value and realize that it is actually a function. To make things worse, when this happens the stack trace points to the place that is trying to use the return value instead of pointing to the function call that is the actual source of the problem.
My final impression was that currying works better a language like Haskell that has a strong type system. In a dynamic language it is more problematic.
Re:Show HN: Omg-Curry – JavaScript currying library
by javajosh on Monday August 10, 2020 @06:57PM
(#24115100)
I like this too (and use a version myself) however this form only supports one argument at a time. E.g. add(1,2) is going to return the curry of add(1), which is not what you want. The OP's function doesn't have that problem.
Something I would really like, although this would require some language-level changes, I think, is the ability to curry arguments in any order, maybe using placeholders. So you could say add(_, 2) and get back a function of one argument, such that if you call it with 1, for example, you invoke add(1, 2).
Re:Show HN: Omg-Curry – JavaScript currying library
by brundolf on Monday August 10, 2020 @08:22PM
(#24115867)
What it ends up being for normal usage is something like this:
add(1)(2)
Which is admittedly a little bit clunky, though from a quick read I don't think the library helps with this.
You might be interested in the "pipeline operator" proposal. In addition to pairing nicely with curried functions, it offers a certain amount of re-ordering.
Re:Show HN: Omg-Curry – JavaScript currying library
by ufo on Monday August 10, 2020 @11:24PM
(#24116871)
The add example is a bit boring because all the arguments are the same "kind". Partial evaluation is more interesting if the arguments are more independent. To borrow a contrived example from the Lodash docs, you can use partial evaluation to make a custom greeter function:
My final impression was that currying works better a language like Haskell that has a strong type system. In a dynamic language it is more problematic.
Something I would really like, although this would require some language-level changes, I think, is the ability to curry arguments in any order, maybe using placeholders. So you could say add(_, 2) and get back a function of one argument, such that if you call it with 1, for example, you invoke add(1, 2).
You might be interested in the "pipeline operator" proposal. In addition to pairing nicely with curried functions, it offers a certain amount of re-ordering.
The example doesn't feel that exciting...
https://lodash.com/docs/4.17.15#partial https://lodash.com/docs/4.17.15#curry
Currying works similarly, except that the function by does the partial evaluation automatically if you call it with less arguments.> A Curry takes arguments one by one unlike functions which takes all arguments at once.
Took the words right out of my brain.
https://xkcd.com/2210/
still think it(redux) was a misplaced usage of currying.