1signature stmonad =
2sig
3type ('a, 'b) stmonad = 'a -> ('a * 'b)
4
5val >> : ('a, 'b) stmonad * ('a, 'c) stmonad -> ('a, 'c) stmonad
6val >- : ('a, 'b) stmonad * ('b -> ('a, 'c) stmonad) -> ('a, 'c) stmonad
7val ok : ('a, unit) stmonad
8val return : 'a -> ('b, 'a) stmonad
9
10val lift  : ('a -> 'b) -> ('s,'a) stmonad -> ('s,'b)stmonad
11val lift2 : ('a -> 'b -> 'c) -> ('s,'a) stmonad -> ('s,'b) stmonad ->
12            ('s,'c) stmonad
13
14val mmap : ('a -> ('b, 'c) stmonad) -> 'a list -> ('b, 'c list) stmonad
15end
16