   @spec fetch(t, index) :: {:ok, element} | :error
   def fetch(enumerable, index)
 
+  def fetch(first..last, index) when is_integer(index) do
+    fetch_range(first, last, index)
+  end
+
   def fetch(enumerable, index) when is_integer(index) and index < 0 do
-    case enumerable do
-      first..last ->
-        fetch_range(first, last, index)
-
-      _ ->
-        case Enumerable.count(enumerable) do
-          {:ok, count} when (count + index) < 0 ->
-            :error
-
-          {:ok, count} ->
-            fetch_enumerable(enumerable, count + index, Enumerable)
-
-          {:error, _} ->
-            enumerable
-            |> reverse
-            |> fetch_list((-index) - 1)
-        end
+    case Enumerable.count(enumerable) do
+      {:ok, count} when (count + index) < 0 ->
+        :error
+
+      {:ok, count} ->
+        fetch_enumerable(enumerable, count + index, Enumerable)
+
+      {:error, _} ->
+        enumerable
+        |> reverse()
+        |> fetch_list((-index) - 1)
     end
   end
 

          {:ok, module}
      end

    case count_res do
      :error ->
        :error
      {:ok, module} ->

    fetch_list(enumerable, index)
  end

  def fetch(enumerable, index) when is_integer(index) do
    count_result =
      case Enumerable.count(enumerable) do
        {:ok, count} when (count - 1 - index) < 0 ->
          :error
