X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=src%2Fhope_result.erl;h=7cae0a355b463c7ed143475afad234d8a893048b;hb=b69220d7a75faba9743d5b89b6fa40443cd39eec;hp=feda5379c1e6ec36e506530547937928b79e82a9;hpb=b79afea06befb5309f4a3f0388e587e17c484b83;p=hope.git diff --git a/src/hope_result.erl b/src/hope_result.erl index feda537..7cae0a3 100644 --- a/src/hope_result.erl +++ b/src/hope_result.erl @@ -1,12 +1,15 @@ -module(hope_result). +-behavior(hope_gen_monad). -export_type( [ t/2 ]). -export( - [ pipe/2 + [ return/1 + , map/2 + , pipe/2 , lift_exn/1 , lift_exn/2 ]). @@ -18,6 +21,18 @@ . +-spec return(A) -> + {ok, A}. +return(X) -> + {ok, X}. + +-spec map(t(A, Error), fun((A) -> (B))) -> + t(B, Error). +map({ok, X}, F) -> + {ok, F(X)}; +map({error, _}=Error, _) -> + Error. + -spec pipe([F], X) -> t(Ok, Error) when X :: any()