uncurry

Transform a curried function into a function invoked with multiple arguments.

Usage

var uncurry = require( '@stdlib/utils/uncurry' );

uncurry( fcn[, arity][, thisArg] )

Transforms a curried function into a function invoked with multiple arguments.

function add( x ) {
    return function add( y ) {
        return x + y;
    };
}

var fcn = uncurry( add );

var sum = fcn( 2, 3 );
// returns 5

To enforce a fixed number of parameters, provide an arity argument.

function add( x ) {
    return function add( y ) {
        return x + y;
    };
}

var fcn = uncurry( add, 2 );

var sum = fcn( 9 );
// throws <Error>

To specify an execution context, provide a thisArg argument.

function addX( x ) {
    this.x = x;
    return addY;
}

function addY( y ) {
    return this.x + y;
}

var fcn = uncurry( addX, {} );

var sum = fcn( 2, 3 );
// returns 5

The function supports providing both an arity and execution context.

function addX( x ) {
    this.x = x;
    return addY;
}

function addY( y ) {
    return this.x + y;
}

var fcn = uncurry( addX, 2, {} );

var sum = fcn( 2, 3 );
// returns 5

sum = fcn( 4 );
// throws <Error>

Examples

var curry = require( '@stdlib/utils/curry' );
var uncurry = require( '@stdlib/utils/uncurry' );

var uncurried;
var curried;
var bool;
var out;
var i;

function add( x, y, z, w, t, s ) {
    return x + y + z + w + t + s;
}

out = add( 0, 10, 20, 30, 40, 50 );
// returns 150

// Transform `add` into a curried function:
curried = curry( add );
out = curried;
for ( i = 0; i < add.length; i++ ) {
    out = out( i*10 );
}
bool = ( out === 150 );
// returns true

// Uncurry a curried function:
uncurried = uncurry( curried );

out = uncurried( 0, 10, 20, 30, 40, 50 );
// returns 150