docs: function wrap(yieldable) {
      var self = this
  
      if (isGenerator(yieldable) || isIterator(yieldable)) return starx(yieldable)
  
      if (isFunction(yieldable)) return yieldable
      
      if (isPromise(yieldable)) {
        return function(cb) {
          yieldable.then(function(value) {          
            cb(null, value)
          }, cb)
        }
      }
  
      if (isArray(yieldable)) {
        return function(cb) {
          var values = [], remain = yieldable.length
          for (var i = 0; yieldable[i]; i++) {
            (function(i) {
              wrap.call(self, yieldable[i]).call(self, function(err, value) {
                if (err) return cb(err)
                values[i] = value
                if (--remain === 0) cb(null, values)
              })
            })(i)
          }
        }
      }
  
      return function(cb) {
        return cb(null, yieldable)
      }
    }