Packages

Additional utility functions to extend the power of Elixir's Enum module

Current section

Files

Jump to
enumx lib enumx.ex
Raw

lib/enumx.ex

defmodule Enumx do
@doc """
Similar to filter/2, but returns the value of the function invocation instead of the element itself
"""
def filter_value(enum, fun) do
Enum.flat_map(enum, &if(value = fun.(&1), do: [value], else: []))
end
@doc """
Returns `true` if all elements in `enumerable` are equal.
"""
def all_equal?([]), do: true
def all_equal?(list) when is_list(list) do
first = hd(list)
Enum.all?(list, &(&1 == first))
end
def all_equal?(enum) when is_map(enum) do
all_equal?(Map.to_list(enum))
end
@doc """
Ensures that all elements in `enumerable` are equal, otherwise raises an error.
If all elements are equal, it returns one of those elements.
"""
def unique_value!([]), do: raise ArgumentError, message: "cannot call `unique_value!/1` on an empty list"
def unique_value!(list) when is_list(list) do
if all_equal?(list) do
hd(list)
else
raise "elements in the list #{inspect(list)} are not equal"
end
end
def unique_value!(enum) when is_map(enum) do
unique_value!(Map.to_list(enum))
end
end