Last active
August 5, 2019 20:51
-
-
Save kutyel/818937bda1bf1f513ff63e517342d194 to your computer and use it in GitHub Desktop.
My own implementation of curry π
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Ultimate version | |
const curry = (f, ...args) => | |
f.length <= args.length | |
? f(...args) | |
: x => curry(f, ...args, x) |
Hi! I'm here because I watched again your talk about Lenses in Lambda World (again = I was there that day π ). Congrats for it!
I would like to know what do you think about these concerns:
- The possibility of calling that function with more than one parameter. For example, a different
arity
could be passed. - The possibility of not having unary functions because of
(...argz)
.
Here I have another version to avoid those things: https://gist.github.com/rachelcarmena/196b9f8b1c6b078b65fb1328f09c0269
What do you think about it? Do you think that my concerns make sense?
Thanks in advance!
Hi Rachel! Thanks for the compliments, I'm glad you like the talk!
const curry = (f, ...args) => f.length <= args.length ? f(...args) : x => curry(f, ...args, x)
The argz
thing was added by @ericelliott, I don't really remember now why to be honest π
Thanks @kutyel! I'd remove all the additional parameters. For example, this situation would be possible:
const sum = (a, b) => a + b;
const curriedSum = curry(sum);
const wrongCurriedSum1 = curry(sum, 2); // a function with one parameter
console.log(wrongCurriedSum1(3)); // 5
const wrongCurriedSum2 = curry(sum, 2, 3); // not a function, but 5
const wrongCurriedSum3 = curry(sum, 2, 3, 4); // not a function, but 5
Thanks again!
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I see what you did there with the default param, very clever! π€ I was actually looking for a way to return that lambda without the
function
keyword, and here I have my answer π