code: function CompositeFunction(fxs) {
    var self = this, fx = fxs;
  
    // if any fn has ordered property, force all to be (not ideal w.r.t. perf, find a better way)
    self.type="simple";
    for (var f in fxs) {
      if (f.type === "ordered") {
        self.type = "ordered";
      }
    }
  
    self.init = function() { for(var i in fxs) { fx[i] = fxs[i].make(fxs[i].win); fx[i].init(); } };
    self.accumulate = function(value) { for (var i in fx) { fx[i].accumulate(value); } };
    self.compensate = function(value) { for (var i in fx) { fx[i].compensate(value); } };
    self.emit = function() { var a = []; for (var i in fx) { a.push(fx[i].emit()); }; return a; };
    self.make = function() { return new CompositeFunction(fx); };
  }
docs: Conveniance. Computations on a set of (independant) aggregate functions. Use wisely.