X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=src%2Fhope_option.erl;h=d820b7bc90b2d10ba719508c8f4182c08497c678;hb=27a4f25fb636bbff0f8085d66e433125dc5fe17d;hp=92636c9f7191689526783806cbf85c0e9a7599fb;hpb=3b156801097bcd07272f1db3a62a675495fa9d77;p=hope.git diff --git a/src/hope_option.erl b/src/hope_option.erl index 92636c9..d820b7b 100644 --- a/src/hope_option.erl +++ b/src/hope_option.erl @@ -1,5 +1,6 @@ -module(hope_option). + -export_type( [ t/1 ]). @@ -8,6 +9,7 @@ [ put/2 , get/2 , map/2 + , iter/2 ]). @@ -17,16 +19,25 @@ . +-spec put(A, fun((A) -> boolean())) -> + t(A). put(X, F) -> case F(X) of true -> {some, X} ; false -> none end. - +-spec get(t(A), Default :: A) -> + A. get({some, X}, _) -> X; get(none , Y) -> Y. - +-spec map(t(A), fun((A) -> (B))) -> + t(B). map({some, X}, F) -> {some, F(X)}; map(none , _) -> none. + +-spec iter(t(A), fun((A) -> (ok))) -> + ok. +iter({some, X}, F) -> ok = F(X); +iter(none , _) -> ok.