class Enumerable::Enumerator

def next

def next
  require 'generator'
  @generator ||= ::Generator.new(self)
  raise StopIteration unless @generator.next?
  @generator.next
end

def rewind

def rewind
  require 'generator'
  @generator ||= ::Generator.new(self)
  @generator.rewind
  self
end

def with_index(offset = 0)

def with_index(offset = 0)
  return to_enum(:with_index, offset) unless block_given?
  each do |*args|
    yield args.size == 1 ? args[0] : args, offset
    offset += 1
  end
end