X-Git-Url: https://git.xandkar.net/?a=blobdiff_plain;f=src%2Fhope_option.erl;h=02ef2f3b7f76dce72df5a6de52eb1aaa10a390c8;hb=87160c0adda38ad3c307cc4072a03ab606f359ef;hp=572162881ec9d85c7d6728ceff7b04c56666758a;hpb=b69220d7a75faba9743d5b89b6fa40443cd39eec;p=hope.git diff --git a/src/hope_option.erl b/src/hope_option.erl index 5721628..02ef2f3 100644 --- a/src/hope_option.erl +++ b/src/hope_option.erl @@ -7,12 +7,16 @@ ]). -export( - [ put/2 - , get/2 - , return/1 + % Generic monad interface + [ return/1 , map/2 - , iter/2 , pipe/2 + + % Specific to hope_option:t() + , return/2 + , put/2 + , get/2 + , iter/2 , of_result/1 , of_undefined/1 ]). @@ -27,10 +31,7 @@ -spec put(A, fun((A) -> boolean())) -> t(A). put(X, F) -> - case F(X) - of true -> {some, X} - ; false -> none - end. + return(X, F). -spec get(t(A), Default :: A) -> A. @@ -42,6 +43,14 @@ get(none , Y) -> Y. return(X) -> {some, X}. +-spec return(A, fun((A) -> boolean())) -> + t(A). +return(X, Condition) -> + case Condition(X) + of true -> {some, X} + ; false -> none + end. + -spec map(t(A), fun((A) -> (B))) -> t(B). map({some, X}, F) -> {some, F(X)};