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));