   Returns `{ :ok, element }` if found, otherwise `:error`.
 
   A negative index can be passed, which means the collection is
-  iterated once and the index is counted from the end (i.e.
+  enumerated once and the index is counted from the end (i.e.
   `-1` fetches the last element).
 
   ## Examples

  end

  def slice(coll, first..last) do
    { list, count } = iterate_and_count(coll, 0)
    corr_first = if first >= 0, do: first, else: first + count
    corr_last = if last >= 0, do: last, else: last + count
    length = corr_last - corr_first + 1

    { acc, buffer, i }
  end

  defp enumerate_and_count(collection, count) when is_list(collection) do
    { collection, length(collection) - abs(count) }
  end

  defp enumerate_and_count(collection, count) do
    map_reduce(collection, -abs(count), fn(x, acc) -> { x, acc + 1 } end)
  end

