/** * Curry - Function currying * Copyright (c) 2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com * Licensed under BSD (http://www.opensource.org/licenses/bsd-license.php) * Date: 10/4/2008 * * @author Ariel Flesler * @version 1.0.1 */ function curry( fn ){ return function(){ var args = curry.args(arguments), master = arguments.callee, self = this; return args.length >= fn.length ? fn.apply(self,args) : function(){ return master.apply( self, args.concat(curry.args(arguments)) ); }; }; }; curry.args = function( args ){ return Array.prototype.slice.call(args); }; Function.prototype.curry = function(){ return curry(this); };