JSFiddle - React, Tailwind, and code Playground
by YangHax
JavaScript
log = msg => document.body.innerHTML += msg + '<br/>';
// BASIC: 1+2=3
const sum = (a=0,b=0) => 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 as necessary
function infiniteCurry(f) {
function retF(x, total) {
total = f(total,x);
const yF = y => retF(y,total);
yF.toString = _ => total;
return yF;
}
return retF;
}
const infiniteCurriedSum = infiniteCurry(sum);
log('Infinite Curried: ' + infiniteCurriedSum(1)(2)(3)(4)(5)); // 15