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