sig   type ('a, 'b) t = [ `Error of '| `Ok of 'a ]   val return : '-> ('a, 'b) t   val bind : ('a, 'b) t -> ('-> ('c, 'b) t) -> ('c, 'b) t   val ( >>= ) : ('a, 'b) t -> ('-> ('c, 'b) t) -> ('c, 'b) t   val fail : '-> ('a, 'b) t   val map : ('a, 'b) t -> ('-> 'c) -> ('c, 'b) t   val ( >>| ) : ('a, 'b) t -> ('-> 'c) -> ('c, 'b) t   val destruct :     ('a, 'b) t -> ([> `Error of '| `Ok of 'a ] -> ('c, 'd) t) -> ('c, 'd) t   val ( >>< ) :     ('a, 'b) t -> ([> `Error of '| `Ok of 'a ] -> ('c, 'd) t) -> ('c, 'd) t end