sig type ('a, 'b) monad = ('a, 'b) monad val ( >>= ) : ('a, 'b) monad -> ('a -> ('c, 'b) monad) -> ('c, 'b) monad val ( >>| ) : ('a, 'b) monad -> ('a -> 'c) -> ('c, 'b) monad end