# uncurry
> Transform a curried function into a function invoked with multiple arguments.
## Usage
```javascript
var uncurry = require( '@stdlib/utils/uncurry' );
```
#### uncurry( fcn\[, arity]\[, thisArg] )
Transforms a curried function into a function invoked with multiple arguments.
```javascript
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.
```javascript
function add( x ) {
return function add( y ) {
return x + y;
};
}
var fcn = uncurry( add, 2 );
var sum = fcn( 9 );
// throws
```
To specify an execution context, provide a `thisArg` argument.
```javascript
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.
```javascript
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
```
## Examples
```javascript
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
```