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