V
А пока что банальный
Data
|> Enum.filter
|> Enum.map
|> Enum.whatever
Превращается в жёсткую кашу
Tmp1 = lists:map(..., Data),
Tmp2 = smth:filter(..., Tmp1),
Tmp3 = maps:whatever(..., Tmp2),
или сделать модуль, который повторяет сигнатуры эликсировских (и более удобен для вложенных вызовов) типа того:
my_enum:
-spec map(list(), fun()) -> list().
map(List, Fn) when is_list(List) -> lists:map(Fn, List).
-spec reduce(list(), any(), fun()) -> any().
reduce(List, Acc, Fn) when is_list(List) -> lists:foldl(Fn, Acc, List).
По перфомансу отличий между lists:foldl и my_enum:reduce (т.е с вызовом промежуточной функции) не наблюдал.