Add hope_option:iter/2
[hope.git] / src / hope_option.erl
CommitLineData
e492ea13
SK
1-module(hope_option).
2
2a40de4f 3
3b156801
SK
4-export_type(
5 [ t/1
6 ]).
e492ea13 7
3b156801
SK
8-export(
9 [ put/2
10 , get/2
11 , map/2
27a4f25f 12 , iter/2
3b156801 13 ]).
e492ea13
SK
14
15
3b156801
SK
16-type t(A) ::
17 none
18 | {some, A}
19 .
e492ea13
SK
20
21
ed9905af
SK
22-spec put(A, fun((A) -> boolean())) ->
23 t(A).
e492ea13
SK
24put(X, F) ->
25 case F(X)
26 of true -> {some, X}
27 ; false -> none
28 end.
29
ed9905af
SK
30-spec get(t(A), Default :: A) ->
31 A.
e492ea13
SK
32get({some, X}, _) -> X;
33get(none , Y) -> Y.
34
ed9905af
SK
35-spec map(t(A), fun((A) -> (B))) ->
36 t(B).
e492ea13
SK
37map({some, X}, F) -> {some, F(X)};
38map(none , _) -> none.
27a4f25f
SK
39
40-spec iter(t(A), fun((A) -> (ok))) ->
41 ok.
42iter({some, X}, F) -> ok = F(X);
43iter(none , _) -> ok.
This page took 0.019992 seconds and 4 git commands to generate.