docs: function compose(middleware) {
  	const args = [].slice.call(arguments, 1);
    return function *(next) {
      if (!next) next = noop();
  
      var i = middleware.length;
  
      while (i--) {
        next = middleware[i].apply(this, args.concat(next));
      }
  
      return yield *next;
    }
  }