Skip to content

Instantly share code, notes, and snippets.

@shapled

shapled/curry.js Secret

Created November 24, 2020 11:58

Revisions

  1. shapled created this gist Nov 24, 2020.
    27 changes: 27 additions & 0 deletions curry.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,27 @@
    function curry(f, params_count) {
    if ([0, 1].includes(params_count)) return f;
    let result_function = f;
    for (let i = 1; i < params_count; i++) {
    const last_result_function = result_function
    result_function = function(...params) {
    return function(...params2) {
    params2 = params2.concat(params)
    return last_result_function(...params2)
    }
    }
    }
    return result_function;
    }

    function add1(a, b) { return a + b }
    function add2(a, b, c) { return a + b + c }

    const curriedAdd1 = curry(add1, 2);
    const curriedAdd2 = curry(add2, 3);

    console.log(curriedAdd1(1)(2)); // 3
    console.log(curriedAdd1(3)(2)); // 5
    const t = curriedAdd1(1)
    console.log(t(2)); // 3
    console.log(t(3)); // 4
    console.log(curriedAdd2(1)(2)(3)); // 6