functor (Deferred : DEFERRED->
  sig
    type 'a deferred = 'Deferred.t
    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 -> 'a deferred) -> ('a, exn) t
    val wrap_deferred :
      on_exn:(exn -> 'a) -> (unit -> 'b 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