     [fun.(value) | list]
   end
 
-  defp do_update_at(list, index, _fun) when index < 0 do
-    list
-  end
-
   defp do_update_at([head | tail], index, fun) do
     [head | do_update_at(tail, index - 1, fun)]
   end

    []
  end

  defp do_replace_at(list, index, _value) when index < 0 do
    list
  end

  defp do_replace_at([_old | rest], 0, value) do
    [value | rest]
  end

    [value]
  end

  defp do_insert_at(list, 0, value) do
    [value | list]
  end

