Object Currying (idea)

Darren Cresswell
Oct 7 · 1 min read

The concept of currying is nothing new to the FP world. The idea is simple — you allow for partial application of arguments to a function by returning another function when you don’t call the function with all the arguments — the function that is then returned has the earlier values preset. eg: (note: this is not actually currying, as we aren’t creating a function that takes two arguments, but it illustrates the idea)

const mult => x => y => x*y;const multBy5 = mult(5);multBy5(6); // answer is 30

But the annoyance is that you always need to provide the arguments in the same order — or else you can’t curry, because arguments aren’t just interchangable. But what is you could use objects to curry functions? the idea would be as follows:

const mult => objCurry(["x","y"],({x, y}) => x*y);const multBy5 = mult({x: 5});multBy5({y: 6}); // 30

You could alternatively set y instead of X in the first function and then set X in the second. As its an object, the order is interchangable. A very brief POC is shown below:

function objCurry(keys, cb) {
function fn(obj) {
if (keys.some(key => !(key in obj))) {
return newObj => fn({
...obj,
...newObj
});
}
return cb(obj);
}
return fn;
}
function checker(obj) {
const {size, weight} = obj;
console.log("obj", obj);
return size * weight;
}
const ocurry = objCurry(["size","weight"], checker);const a = ocurry({size: 5});
const b = a({weight: 4});
console.log(ocurry, a, b);

Any comments?

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade