define(function () {
/**
* Returns a function that composes multiple functions, passing results to
* each other.
*/
function compose() {
var fns = arguments;
return function(arg){
// only cares about the first argument since the chain can only
// deal with a single return value anyway. It should start from
// the last fn.
var n = fns.length;
while (n--) {
arg = fns[n].call(this, arg);
}
return arg;
};
}
return compose;
});