   ## find_value
 
   defp do_find_value([h|t], ifnone, fun) do
-    case fun.(h) do
-      x in [false, nil] -> do_find_value(t, ifnone, fun)
-      other -> other
-    end
+    fun.(h) || do_find_value(t, ifnone, fun)
   end
 
   defp do_find_value([], ifnone, _) do

  end

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

  defp do_find_value(:stop, _, ifnone, _) do

  end

  defp do_partition({ h, next }, iterator, fun, acc1, acc2) do
    if fun.(h) do
      do_partition(iterator.(next), iterator, fun, [h|acc1], acc2)
    else
      do_partition(iterator.(next), iterator, fun, acc1, [h|acc2])
    end
  end

