sig
  type 'a deferred
  type ('a, 'b) t = ('a, 'b) Result.t deferred
  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
  val of_result : ('a, 'b) Result.t -> ('a, 'b) t
  val catch_deferred :
    (unit -> 'Pvem.DEFERRED_RESULT.deferred) -> ('a, exn) t
  val wrap_deferred :
    on_exn:(exn -> 'a) ->
    (unit -> 'Pvem.DEFERRED_RESULT.deferred) -> ('b, 'a) t
  val map_option : 'a option -> f:('-> ('r, 'b) t) -> ('r option, 'b) t
  val some : or_fail:'error -> 'a option -> ('a, 'error) t
end