 
   ## 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
+  end
+
+  defp do_find_value([], ifnone, _) do
+    ifnone
+  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
+      x in [false, nil] -> do_find_value(iterator.(next), iterator, ifnone, fun)
+      other -> other
     end
   end
 

        #=> true

  """
  def find_value(collection, ifnone // nil, fun) do
    { iterator, pointer } = I.iterator(collection)
    do_find_value(pointer, iterator, ifnone, fun)
  end

  @doc """

      #=> [4]

  """
  def filter_map(collection, filter, mapper) when is_list(collection) do
    lc item inlist collection, filter.(item), do: mapper.(item)
  end

  def filter_map(collection, filter, mapper) do
    { iterator, pointer } = I.iterator(collection)
    do_filter_map(pointer, iterator, filter, mapper)
