       [a: 3, b: 4, c: 5]
 
   """
-  @spec with_index(t) :: [{element, integer}]
-  @spec with_index(t, integer) :: [{element, integer}]
+  @spec with_index(t) :: [{element, index}]
+  @spec with_index(t, integer) :: [{element, index}]
   def with_index(enumerable, offset \\ 0) do
     map_reduce(enumerable, offset, fn x, acc ->
       {{x, acc}, acc + 1}

      :error

  """
  @spec fetch(t, integer) :: {:ok, element} | :error
  def fetch(enumerable, index)
  def fetch(first..last, index) when is_integer(index),
    do: fetch_range(first, last, index)


  @type t :: Enumerable.t
  @type element :: any
  @type index :: integer
  @type default :: any

  # Require Stream.Reducers and its callbacks
