curryRight

    Transform a function into a sequence of functions each accepting a single argument.

    Usage

    var curryRight = require( '@stdlib/utils/curry-right' );
    

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

    Transforms a function into a sequence of functions each accepting a single argument.

    function add( x, y ) {
        return x + y;
    }
    
    var fcn = curryRight( add );
    
    var sum = fcn( 2 )( 3 );
    // returns 5
    

    By default, arity is equal to fcn.length. For functions without explicit parameters, provide an arity argument.

    function add() {
        return arguments[ 0 ] + arguments[ 1 ];
    }
    
    var fcn = curryRight( add, 2 );
    
    var sum = fcn( 2 )( 3 );
    // returns 5
    

    To specify the curried function execution context, provide a thisArg argument.

    var obj = {
        'name': 'Ada',
        'greet': function greet( word1, word2 ) {
            return word1 + ' ' + word2 + ', ' + this.name + '!';
        }
    };
    
    var fcn = curryRight( obj.greet, obj );
    
    var str = fcn( 'there' )( 'Hello' );
    // returns 'Hello there, Ada!'
    

    The function supports providing both an arity and execution context.

    var obj = {
        'name': 'Ada',
        'greet': function greet() {
            return arguments[ 0 ] + ' ' + arguments[ 1 ] + ', ' + this.name + '!';
        }
    };
    
    var fcn = curryRight( obj.greet, 2, obj );
    
    var str = fcn( 'there' )( 'Hello' );
    // returns 'Hello there, Ada!'
    

    Notes

    • Until return value resolution, each invocation returns a new partially applied curry function.

      function add( x, y, z ) {
          return x + y + z;
      }
      
      var fcn = curryRight( add );
      
      var s0 = fcn( 1 )( 2 )( 3 );
      // returns 6
      
      s0 = fcn( -1 )( -2 )( -3 );
      // returns -6
      
      s0 = fcn( 10 )( 20 )( 30 );
      // returns 60
      
      // Return a partially applied curry function:
      var f1 = fcn( 3 );
      
      var s1 = f1( 4 )( 5 );
      // returns 12
      
      s1 = f1( 6 )( 7 );
      // returns 16
      
      s1 = f1( 8 )( 9 );
      // returns 20
      
      // Return a partially applied curry function:
      var f2 = fcn( 4 )( 5 );
      
      var s2 = f2( 6 );
      // returns 15
      
      s2 = f2( 70 );
      // returns 79
      
      s2 = f2( 700 );
      // returns 709
      
    • The difference between this function and curry is the order in which arguments are applied. This function applies arguments starting from the right.

    Examples

    var curryRight = require( '@stdlib/utils/curry-right' );
    
    var fcn;
    var out;
    var i;
    
    function add( x, y, z, w, t, s ) {
        return x + y + z + w + t + s;
    }
    
    fcn = curryRight( add );
    out = fcn;
    for ( i = 0; i < add.length; i++ ) {
        out = out( i*10 );
    }
    console.log( out );