# problematic function def foo(x) do stuff = get_stuff(x) case stuff do nil -> false _ -> Enum.any?(stuff, fn unit -> x in unit end) end end # below is the source of Enum.any? @spec any?(t, (element -> as_boolean(term))) :: boolean def any?(enumerable, fun) when is_list(enumerable) do predicate_list(enumerable, false, fun) end def any?(first..last//step, fun) do predicate_range(first, last, step, false, fun) end def any?(enumerable, fun) do Enumerable.reduce(enumerable, {:cont, false}, fn entry, _ -> if fun.(entry), do: {:halt, true}, else: {:cont, false} end) |> elem(1) end defp predicate_list([h | t], initial, fun) do if !!fun.(h) == initial do predicate_list(t, initial, fun) else not initial end end defp predicate_list([], initial, _) do initial end