docs: function flow(fn) {
    if (!isGenerator(fn)) {
      throw new Error(NOT_GENERATOR);
    }
    var gen = fn();
    next();
    function next(e, v) {
      var r = e ? gen.throw(e) : gen.next(v);
      if (!r.done) {
        if (isThunk(r.value)) {
          r.value(function(e, v){next(e, v);});
        } else if (isThunkArray(r.value)) {
          parallel(r.value, next);
        } else {
          next(new Error(NOT_THUNK));
        }
      }
    }
  }