Skip to content

Instantly share code, notes, and snippets.

@kutyel
Last active August 5, 2019 20:51
Show Gist options
  • Save kutyel/818937bda1bf1f513ff63e517342d194 to your computer and use it in GitHub Desktop.
Save kutyel/818937bda1bf1f513ff63e517342d194 to your computer and use it in GitHub Desktop.
My own implementation of curry πŸ›
// Ultimate version
const curry = (f, ...args) =>
f.length <= args.length
? f(...args)
: x => curry(f, ...args, x)
@kutyel
Copy link
Author

kutyel commented Aug 5, 2019

Hi Rachel! Thanks for the compliments, I'm glad you like the talk! ☺️ I think you are right, what about this implementation?

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 πŸ˜‚

@rachelcarmena
Copy link

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