 
   ## find_value
 
-  defp do_find_value([h|t], ifnone, fun) do
-    fun.(h) || do_find_value(t, ifnone, fun)
-  end
-
-  defp do_find_value([], ifnone, _) do
-    ifnone
+  defp do_find_value([h|t], default, fun) do
+    fun.(h) || do_find_value(t, default, fun)
+  end
+
+  defp do_find_value([], default, _) do
+    default
   end
 
   ## shuffle


  """
  @spec find_value(t, any, (element -> any)) :: any | :nil
  def find_value(collection, ifnone \\ nil, fun)

  def find_value(collection, ifnone, fun) when is_list(collection) do
    do_find_value(collection, ifnone, fun)
  end

  def find_value(collection, ifnone, fun) do
    Enumerable.reduce(collection, {:cont, ifnone}, fn(entry, ifnone) ->
      fun_entry = fun.(entry)
      if fun_entry, do: {:halt, fun_entry}, else: {:cont, ifnone}
    end) |> elem(1)
  end



  ## find

  defp do_find([h|t], default, fun) do
    if fun.(h) do
      h
    else
      do_find(t, default, fun)
    end
  end

  defp do_find([], default, _) do
    default
  end

  ## find_index
