Search code examples
javascriptfunctional-programmingbind

Unable to inject parameters properly?


const curryByBind = (fn) => fn.length === 0 ? fn() : (arg) => fn.bind(null, arg);
const sum = (x,y) => x+y;
const sumMany = curryByBind(sum);

console.log(sumMany(1)(2)())

I'm trying to learn curry and attempting to inject arguments into function via bind, I was thinking sumMany(1) should return a function that can take (2) which eventually at last execute fn(), but I cant figure out which part gone wrong, it's saying sumMany(...)(...) is not a function?


Solution

  • Your curryByBind is working fine: the only problem is that you ran out of arguments.

    sum(x, y) takes two arguments. After calling sumMany with one argument (sum's x), it returns a function expecting a single argument (sum's y).

    After you call that function with one argument, you have supplied values for all of sum's arguments, so it returns 3. (Which is not a function, hence the error when you try calling it.)

    console.log(sumMany(1)(2)) logs 3, as expected.