DEV Community

Discussion on: Daily Challenge #123 - Curry me Softly

Collapse
 
willsmart profile image
willsmart

A simple impl in Typescript...

function doCurrishSortOfThingToIt(fn: Function) {
  const savedArgs: any[] = [];
  return curriedFn;

  function curriedFn(...newArgs: any[]) {
    savedArgs.push(...newArgs);
    if (newArgs.length) return curriedFn;

    const result = fn.apply(this, savedArgs);
    savedArgs.length = 0;
    return result;
  }
}

Running though the examples...


function adder () {
  return [].slice.call(arguments).reduce(function(a,b){
    return a + b
  },0);
}
var curryAdder = doCurrishSortOfThingToIt(adder);

curryAdder(1);
curryAdder(1,2,3);
curryAdder(2)(2,5);
var example = curryAdder();
curryAdder(1)(2);
var example2 = curryAdder();

console.log(example, example2) // output: 16, 3

var curryEval = doCurrishSortOfThingToIt(eval);
curryEval("var y = function(){return true}");
curryEval();
console.log(y()); // output: true