Infinite Curry
Tika Masala
by YangHax
JavaScript
log = msg => document.body.innerHTML += msg + '<br/>';
// BASIC: 1+2=3
const sum = (a,b) => a+b;
log('Normal: ' + sum(1,2));
// BASIC CURRY: 1+2=3 still
const twoWayCurry = f => a => b => f(a,b);
const curriedTwoWaySum = twoWayCurry(sum);
log('Curried x2: ' + curriedTwoWaySum(1)(2));
// THREE-LEVEL DEEP CURRY: 1+2+3=6
const threeWayCurry = f => a => b => c => f(f(a,b),c);
const curriedThreeWaySum = threeWayCurry(sum);
log('Curried x3: ' + curriedThreeWaySum(1)(2)(3));
// WITH SOME IMAGINATION MADE "INFINITE" CURRY
// 1+2+3+4+5=15 can do as many calls
function infiniteCurry(f) {
let total = 0;
const retF = x => ((total+=x), retF);
retF.toString = _ => total;
return retF;
}
const infiniteCurriedSum = infiniteCurry(sum);
log('Infinite Curried: ' + infiniteCurriedSum(1)(2)(3)(4)(5));