curry

by Artem

JavaScript

'use strict';

const _pipe = (f, g) => (...args) => g(f(...args));
const pipe = (...fns) => fns.reduce(_pipe);

const add = (a, b) => a + b;
const inc = num => num + 1;
const dbl = num => num * 2;

const pipeline = pipe(add, inc, dbl, inc);

// console.log(pipeline(1, 2));


const curry = fn => {
  if (fn.length <= 1) return fn;
  return function inner(...args) {
    if (args.length === fn.length) return fn.apply(this, [...args]);
    return (...newArgs) => inner(...args, ...newArgs);
  };
};

let curried = curry(add);
console.log(curried(1)(2));