Почему вы просто не можете использовать try / catch вот так?
1> lists:foldl(
1> fun (E, A) ->
1> try E + A
1> catch
1> _:_ ->
1> A
1> end
1> end, 0, [1, 2, 3, 4, a, 6]).
16
Или вы можете использовать функцию декоратора, если хотите извлечь обработку ошибок, например:
1> Sum = fun (E, A) -> E + A end.
#Fun<erl_eval.12.113037538>
2> HandlerFactory = fun (F) ->
2> fun (E, A) ->
2> try F(E, A)
2> catch
2> _:_ ->
2> A
2> end
2> end
2> end.
#Fun<erl_eval.6.13229925>
3> lists:foldl(HandlerFactory(Sum), 0, [1, 2, 3, 4, a, 6]).
16
4> Mul = fun (E, A) -> E * A end.
#Fun<erl_eval.12.113037538>
5> lists:foldl(HandlerFactory(Mul), 1, [1, 2, 3, 4, a, 6]).
144