ThomasBurleson
10/15/2013 - 10:30 PM

AS3 Implementation of `curry` function to pre-capture target function arguments left-to-right. Only when are the arguments have been capture

AS3 Implementation of curry function to pre-capture target function arguments left-to-right. Only when are the arguments have been captured does the target function get invoked with the accumulated argument values.

package utils.function 
{
    public function curry(func:Function, ... args:Array):*
    {
        var arity:int = func.length;
        var currying:Function = function(func:Function, arity:int, args:Array):*
        {
            return function(... moreArgs:Array):* {
                if(moreArgs.length + args.length < arity)
                {
                    return currying(func, arity, args.concat(moreArgs));
                }
                return func.apply(this, args.concat(moreArgs));
            }
        }
        return currying(func, arity, args);
    }
}