         #=> true
 
   """
-  def find_value(collection, ifnone // nil, fun) do
-    { iterator, pointer } = I.iterator(collection)
-    do_find_value(pointer, iterator, ifnone, fun)
+  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
+    case I.iterator(collection) do
+      { iterator, pointer } ->
+        do_find_value(pointer, iterator, ifnone, fun)
+      list when is_list(list) ->
+        find_value(list, ifnone, fun)
+    end
   end
 
   @doc """

        #=> 2

  """
  def find_index(collection, fun) do
    { iterator, pointer } = O.iterator(collection)
    do_find_index(pointer, iterator, 1, fun)
  end

  @doc """


  ## find

  defp do_find([h|t], ifnone, fun) do
    case fun.(h) do
      x in [false, nil] -> do_find(t, ifnone, fun)
      _ -> h
    end
  end

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

  defp do_find({ h, next }, iterator, ifnone, fun) do
    case fun.(h) do
      x in [false, nil] -> do_find(iterator.(next), iterator, ifnone, fun)
      _ -> h
    end
  end

