1signature optmonad =
2sig
3
4type ('a, 'b) optmonad = 'a -> ('a * 'b) option
5
6val fail : ('a, 'b) optmonad
7val return : 'b -> ('a, 'b) optmonad
8val ok : ('a, unit) optmonad
9
10val >- : ('a, 'b) optmonad * ('b -> ('a, 'c) optmonad) -> ('a, 'c) optmonad
11val ++ : ('a, 'b) optmonad * ('a, 'b) optmonad -> ('a, 'b) optmonad
12val >> : ('a, 'b) optmonad * ('a, 'c) optmonad -> ('a, 'c) optmonad
13val >-> : ('a, 'b) optmonad * ('a, 'c) optmonad -> ('a, 'b) optmonad
14val +++ : ('a, 'b) optmonad * ('a, 'b) optmonad -> ('a, 'b) optmonad
15
16val repeat : ('a, 'b) optmonad -> ('a, unit) optmonad
17val repeatn : int -> ('a, 'b) optmonad -> ('a, unit) optmonad
18
19val tryall : ('a -> ('b, 'c) optmonad) -> 'a list -> ('b, 'c) optmonad
20
21val optional : ('a, 'b) optmonad -> ('a, 'b option) optmonad
22val mmap : ('a -> ('b, 'c) optmonad) -> 'a list -> ('b, 'c list) optmonad
23
24val many : ('b, 'a) optmonad -> ('b, 'a list) optmonad
25val many1 : ('b, 'a) optmonad -> ('b, 'a list) optmonad
26
27val lift : ('a -> 'b) -> ('s,'a) optmonad -> ('s,'b) optmonad
28val lift2 : ('a -> 'b -> 'c) -> ('s,'a) optmonad -> ('s,'b) optmonad ->
29            ('s,'c)optmonad
30
31val addState : 's -> ('s0 * 's, 'a) optmonad -> ('s0,'s * 'a) optmonad
32
33end
34