Packages

A collection of useful functions that aren't found in Elixir's `Enum`.

Current section

Files

Jump to
mune lib mune.ex
Raw

lib/mune.ex

defmodule Mune do
@moduledoc """
A collection of useful functions that aren't found in `Enum`,
but are cumbersome or inconvenient to write your own optimized
version of.
"""
@type enum :: Enum.t()
@doc """
Reverse the enum, applying `mapper` to each element
iex> Mune.map_reverse([1, 2, 3, 4, 5, 6], &Kernel.*(&1, 2))
[12, 10, 8, 6, 4, 2]
"""
@spec map_reverse(enum, (term -> var)) :: list(var) when var: term
def map_reverse(enum, mapper) do
Enum.reduce(enum, [], fn i, acc ->
[mapper.(i) | acc]
end)
end
@doc """
Flatten the enum and reverse all elements, applying `mapper` to each element.
iex> Mune.flat_map_reverse([[1, 2], [3, 4], [5, 6]], &Kernel.*(&1, 2))
[12, 10, 8, 6, 4, 2]
"""
@spec flat_map_reverse(enum, (term -> var)) :: list(var) when var: term
def flat_map_reverse(enum, mapper) do
Enum.reduce(enum, [], fn inner, acc ->
Enum.reduce(inner, acc, fn i, acc ->
[mapper.(i) | acc]
end)
end)
end
@doc """
Flatten the enum and reverse all elements.
iex> Mune.flatten_reverse([[1, 2], [3, 4], [5, 6]])
[6, 5, 4, 3, 2, 1]
"""
@spec flatten_reverse(enum) :: list
def flatten_reverse(enum) do
Enum.reduce(enum, [], fn inner, acc ->
Enum.reduce(inner, acc, fn i, acc ->
[i | acc]
end)
end)
end
end