-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.