Add hope_option:return/2, which accepts a condition
[hope.git] / src / hope_option.erl
index 180c416..7a87438 100644 (file)
@@ -1,6 +1,6 @@
 -module(hope_option).
 
--behavior(hope_monad).
+-behavior(hope_gen_monad).
 
 -export_type(
     [ t/1
     [ put/2
     , get/2
     , return/1
+    , return/2
     , map/2
     , iter/2
     , pipe/2
     , of_result/1
+    , of_undefined/1
     ]).
 
 
 -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.
@@ -41,6 +40,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)};
@@ -65,3 +72,8 @@ pipe([F|Fs], X) ->
     t(A).
 of_result({ok, X})    -> {some, X};
 of_result({error, _}) -> none.
+
+-spec of_undefined(undefined | A) ->
+    t(A).
+of_undefined(undefined) -> none;
+of_undefined(X)         -> {some, X}.
This page took 0.03068 seconds and 4 git commands to generate.