-export(
[ return/1
, map/2
+ , map_error/2
+ , tag_error/2
, pipe/2
, lift_exn/1
, lift_exn/2
map({error, _}=Error, _) ->
Error.
+-spec map_error(t(A, B), fun((B) -> (C))) ->
+ t(A, C).
+map_error({ok, _}=Ok, _) ->
+ Ok;
+map_error({error, Reason}, F) ->
+ {error, F(Reason)}.
+
+-spec tag_error(t(A, Reason), Tag) ->
+ t(A, {Tag, Reason}).
+tag_error({ok, _}=Ok, _) ->
+ Ok;
+tag_error({error, Reason}, Tag) ->
+ {error, {Tag, Reason}}.
+
-spec pipe([F], X) ->
t(Ok, Error)
when X :: any()
try
{ok, F(X)}
catch Class:Reason ->
- {error, {Label, {Class, Reason}}}
+ tag_error({error, {Class, Reason}}, Label)
end
end.