1signature errormonad = 2sig 3 4datatype ('a,'b) fs = Some of 'a | Error of 'b 5type ('a, 'b, 'c) t = 'a -> ('a * 'b,'c) fs 6 7val fail : string -> ('a, 'b, string) t 8val error : 'c -> ('a,'b,'c) t 9val return : 'b -> ('a, 'b, 'c) t 10val ok : ('a, unit, 'c) t 11 12val >- : ('a, 'b, 'c) t * ('b -> ('a, 'd, 'c) t) -> ('a, 'd, 'c) t 13val ++ : ('a, 'b, 'c) t * ('a, 'b, 'd) t -> ('a, 'b, 'd) t 14val ++? : ('a,'b,'c) t * ('c -> ('a,'b,'d) t) -> ('a,'b,'d) t 15val >> : ('a, 'b, 'c) t * ('a, 'd, 'c) t -> ('a, 'd, 'c) t 16 17val repeat : ('a, 'b, 'c) t -> ('a, unit, 'c) t 18val repeatn : int -> ('a, 'b, 'c) t -> ('a, unit, 'c) t 19val with_flagM : ('a ref * 'a) -> ('s,'b,'c) t -> ('s,'b,'c) t 20 21val mmap : ('a -> ('b, 'c, 'd) t) -> 'a list -> ('b, 'c list, 'd) t 22val foldlM : ('e * 'acc -> ('s,'acc,'error)t) -> 'acc -> 'e list -> 23 ('s,'acc,'error)t 24 25val lift : ('a -> 'b) -> ('s,'a,'e) t -> ('s,'b,'e) t 26val lift2 : ('a -> 'b -> 'c) -> ('s,'a,'e) t -> ('s,'b,'e) t -> 27 ('s,'c,'e) t 28 29val fromOpt : ('a,'b)optmonad.optmonad -> 'c -> ('a,'b,'c)t 30val toOpt : ('a,'b,'c)t -> ('a,'b)optmonad.optmonad 31 32val addState : 's -> ('s0*'s,'a,'error)t -> ('s0,'s*'a,'error) t 33 34end 35