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
See Also
@stdlib/utils/curry: transform a function into a sequence of functions each accepting a single argument.@stdlib/utils/uncurry-right: transform a curried function into a function invoked with multiple arguments.