 
   ## Helpers
 
-  @compile {:inline, enum_to_string: 1}
+  @compile {:inline, enum_to_string: 1, reduce: 3}
 
   defp enum_to_string(entry) when is_binary(entry), do: entry
   defp enum_to_string(entry), do: String.Chars.to_string(entry)

          {acc1, [entry | acc2]}
        end
      end)

    {:lists.reverse(acc1), :lists.reverse(acc2)}
  end



  """
  @spec split_with(t, (element -> any)) :: {list, list}
  def split_with(enumerable, fun) when is_function(fun, 1) do
    {acc1, acc2} =
      reduce(enumerable, {[], []}, fn(entry, {acc1, acc2}) ->
        if fun.(entry) do
