View Source Runbox.Utils.Enum (runbox v13.0.3)
A set of utility functions for Enums.
Summary
Functions
Returns :ok
if fun
applied to every element of enumerable
returns :ok
.
Otherwise it returns the first error occurred during fun
call.
Returns {:ok, list_of_values}
if fun
applied to every element of
enumerable
returns {:ok, value}
. Otherwise it returns the first
error occurred during fun
call.
Invokes fun
for each element in the enumerable
with the accumulator.
If every fun
call returns {:ok, new_acc}
, functions returns {:ok, last_acc}
.
Otherwise it returns the first error occurred during fun
call.
Functions
@spec each_while_ok(Enumerable.t(), (any() -> result)) :: result when result: :ok | {:error, reason :: any()}
Returns :ok
if fun
applied to every element of enumerable
returns :ok
.
Otherwise it returns the first error occurred during fun
call.
Example
iex> each_while_ok([], fn _ -> :not_called_at_all end)
:ok
iex> each_while_ok([1, 2, 3], fn _ -> :ok end)
:ok
iex> each_while_ok([1, 2, 3], &(if &1 == 2, do: {:error, &1}, else: :ok))
{:error, 2}
@spec map_while_ok( Enumerable.t(), (any() -> {:ok, any()} | {:error, reason :: any()}) ) :: {:ok, list()} | {:error, reason :: any()}
Returns {:ok, list_of_values}
if fun
applied to every element of
enumerable
returns {:ok, value}
. Otherwise it returns the first
error occurred during fun
call.
Example
iex> map_while_ok([], fn _ -> :not_called_at_all end)
{:ok, []}
iex> map_while_ok([1, 2, 3], &({:ok, &1 * 2}))
{:ok, [2, 4, 6]}
iex> map_while_ok([1, 2, 3], &(if &1 == 2, do: {:error, &1 * 2}, else: {:ok, &1 * 2}))
{:error, 4}
@spec reduce_while_ok( Enumerable.t(), any(), (any(), any() -> {:ok, any()} | {:error, [{:reason, any()}]}) ) :: {:ok, any()} | {:error, reason :: any()}
Invokes fun
for each element in the enumerable
with the accumulator.
If every fun
call returns {:ok, new_acc}
, functions returns {:ok, last_acc}
.
Otherwise it returns the first error occurred during fun
call.
Example
iex> reduce_while_ok([], :initial, fn _, _ -> :not_called_at_all end)
{:ok, :initial}
iex> reduce_while_ok([1, 2, 3], 0, &({:ok, &1 + &2}))
{:ok, 6}
iex> reduce_while_ok([1, 2, 3], 0, &(if &1 == 2, do: {:error, &1 + &2}, else: {:ok, &1 + &2}))
{:error, 3}