Current section
Files
Jump to
Current section
Files
src/embeds@internal.erl
-module(embeds@internal).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch]).
-export([traverse_map/2, 'try'/2]).
-spec do_traverse_map(
list(INQ),
fun((INQ) -> {ok, INS} | {error, list(INT)}),
list(INS),
list(INT)
) -> {ok, list(INS)} | {error, list(INT)}.
do_traverse_map(List, Body, Oks, Errs) ->
case List of
[] ->
case Errs of
[] ->
{ok, lists:reverse(Oks)};
_ ->
{error, lists:reverse(Errs)}
end;
[Head | Tail] ->
case Body(Head) of
{ok, Ok} ->
do_traverse_map(Tail, Body, [Ok | Oks], Errs);
{error, Err} ->
do_traverse_map(Tail, Body, Oks, lists:append(Err, Errs))
end
end.
-spec traverse_map(list(INF), fun((INF) -> {ok, INH} | {error, list(INI)})) -> {ok,
list(INH)} |
{error, list(INI)}.
traverse_map(List, Body) ->
do_traverse_map(List, Body, [], []).
-spec 'try'(
{ok, IOD} | {error, IOE},
fun((IOD) -> {ok, IOH} | {error, list(IOE)})
) -> {ok, IOH} | {error, list(IOE)}.
'try'(Result, F) ->
case Result of
{ok, Ok} ->
F(Ok);
{error, Err} ->
{error, [Err]}
end.