The currying function shown can be made more flexible:
var _slice = Array.prototype.slice;
var curry = function() {
var args = _slice.call(arguments);
return function() {
var args2 = _slice.call(arguments);
return args[0].apply(this, args.slice(1).concat(args2));
};
};
As can the composition func: var compose = function(f, g) {
return function() {
var args =_slice.call(arguments);
return f(g.apply(this, args));
};
};