createIterator = next => ({
  /**
   * @return {IterableIterator<T>}
   */
  [Symbol.iterator]() {
    return this;
  },

  // @ts-ignore
  next
})
@template T
@param {function():IteratorResult<T>} next
@return {IterableIterator<T>}