sig
  type 'a t = 'Ivar.Deferred.t
  val create : ('Ivar.t -> unit) -> 'Deferred.t
  val upon : 'Deferred.t -> ('-> unit) -> unit
  val peek : 'Deferred.t -> 'a option
  val is_determined : 'Deferred.t -> bool
  val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
  val ( >>| ) : 'a t -> ('-> 'b) -> 'b t
  module Monad_infix :
    sig
      val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
      val ( >>| ) : 'a t -> ('-> 'b) -> 'b t
    end
  val bind : 'a t -> ('-> 'b t) -> 'b t
  val return : '-> 'a t
  val map : 'a t -> f:('-> 'b) -> 'b t
  val join : 'a t t -> 'a t
  val ignore : 'a t -> unit t
  val all_ignore : unit t list -> unit t
  module Infix :
    sig
      val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
      val ( >>| ) : 'a t -> ('-> 'b) -> 'b t
      val ( >>> ) : 'Deferred.t -> ('-> unit) -> unit
    end
  val unit : unit Deferred.t
  val never : unit -> 'Deferred.t
  val both : 'Deferred.t -> 'Deferred.t -> ('a * 'b) Deferred.t
  val all : 'Deferred.t list -> 'a list Deferred.t
  val all_unit : unit Deferred.t list -> unit Deferred.t
  val any : 'Deferred.t list -> 'Deferred.t
  val any_unit : 'Deferred.t list -> unit Deferred.t
  module type Monad_sequence =
    sig
      type 'a t
      val foldi : 'a t -> init:'-> f:(int -> '-> '-> 'b t) -> 'b t
      val fold : 'a t -> init:'-> f:('-> '-> 'b t) -> 'b t
      val init : ?how:Deferred_intf.how -> int -> f:(int -> 'a t) -> 'a t t
      val iter : ?how:Deferred_intf.how -> 'a t -> f:('-> unit t) -> unit t
      val iteri :
        ?how:Deferred_intf.how -> 'a t -> f:(int -> '-> unit t) -> unit t
      val map : ?how:Deferred_intf.how -> 'a t -> f:('-> 'b t) -> 'b t t
      val filter :
        ?how:Deferred_intf.how -> 'a t -> f:('-> bool t) -> 'a t t
      val filter_map :
        ?how:Deferred_intf.how -> 'a t -> f:('-> 'b option t) -> 'b t t
      val all : 'a t t -> 'a t t
      val all_unit : unit t t -> unit t
    end
  module Array :
    sig
      type 'a t = 'a array
      val foldi : 'a t -> init:'-> f:(int -> '-> '-> 'b t) -> 'b t
      val fold : 'a t -> init:'-> f:('-> '-> 'b t) -> 'b t
      val init : ?how:Deferred_intf.how -> int -> f:(int -> 'a t) -> 'a t t
      val iter : ?how:Deferred_intf.how -> 'a t -> f:('-> unit t) -> unit t
      val iteri :
        ?how:Deferred_intf.how -> 'a t -> f:(int -> '-> unit t) -> unit t
      val map : ?how:Deferred_intf.how -> 'a t -> f:('-> 'b t) -> 'b t t
      val filter :
        ?how:Deferred_intf.how -> 'a t -> f:('-> bool t) -> 'a t t
      val filter_map :
        ?how:Deferred_intf.how -> 'a t -> f:('-> 'b option t) -> 'b t t
      val all : 'a t t -> 'a t t
      val all_unit : unit t t -> unit t
    end
  module List :
    sig
      type 'a t = 'a list
      val foldi : 'a t -> init:'-> f:(int -> '-> '-> 'b t) -> 'b t
      val fold : 'a t -> init:'-> f:('-> '-> 'b t) -> 'b t
      val init : ?how:Deferred_intf.how -> int -> f:(int -> 'a t) -> 'a t t
      val iter : ?how:Deferred_intf.how -> 'a t -> f:('-> unit t) -> unit t
      val iteri :
        ?how:Deferred_intf.how -> 'a t -> f:(int -> '-> unit t) -> unit t
      val map : ?how:Deferred_intf.how -> 'a t -> f:('-> 'b t) -> 'b t t
      val filter :
        ?how:Deferred_intf.how -> 'a t -> f:('-> bool t) -> 'a t t
      val filter_map :
        ?how:Deferred_intf.how -> 'a t -> f:('-> 'b option t) -> 'b t t
      val all : 'a t t -> 'a t t
      val all_unit : unit t t -> unit t
    end
  module Queue :
    sig
      type 'a t = 'Core.Std.Queue.t
      val foldi : 'a t -> init:'-> f:(int -> '-> '-> 'b t) -> 'b t
      val fold : 'a t -> init:'-> f:('-> '-> 'b t) -> 'b t
      val init : ?how:Deferred_intf.how -> int -> f:(int -> 'a t) -> 'a t t
      val iter : ?how:Deferred_intf.how -> 'a t -> f:('-> unit t) -> unit t
      val iteri :
        ?how:Deferred_intf.how -> 'a t -> f:(int -> '-> unit t) -> unit t
      val map : ?how:Deferred_intf.how -> 'a t -> f:('-> 'b t) -> 'b t t
      val filter :
        ?how:Deferred_intf.how -> 'a t -> f:('-> bool t) -> 'a t t
      val filter_map :
        ?how:Deferred_intf.how -> 'a t -> f:('-> 'b option t) -> 'b t t
      val all : 'a t t -> 'a t t
      val all_unit : unit t t -> unit t
    end
  module Map : Deferred_intf.Deferred_map
  module Result :
    sig
      type ('a, 'b) t = ('a, 'b) Core.Std.Result.t t
      val ( >>= ) : ('a, 'd) t -> ('-> ('b, 'd) t) -> ('b, 'd) t
      val ( >>| ) : ('a, 'd) t -> ('-> 'b) -> ('b, 'd) t
      module Monad_infix :
        sig
          val ( >>= ) : ('a, 'd) t -> ('-> ('b, 'd) t) -> ('b, 'd) t
          val ( >>| ) : ('a, 'd) t -> ('-> 'b) -> ('b, 'd) t
        end
      val bind : ('a, 'd) t -> ('-> ('b, 'd) t) -> ('b, 'd) t
      val return : '-> ('a, 'b) t
      val map : ('a, 'd) t -> f:('-> 'b) -> ('b, 'd) t
      val join : (('a, 'd) t, 'd) t -> ('a, 'd) t
      val ignore : ('a, 'd) t -> (unit, 'd) t
      val all : ('a, 'd) t List.t -> ('List.t, 'd) t
      val all_ignore : (unit, 'd) t List.t -> (unit, 'd) t
    end
  module Option :
    sig
      type 'a t = 'a option t
      val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
      val ( >>| ) : 'a t -> ('-> 'b) -> 'b t
      module Monad_infix :
        sig
          val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
          val ( >>| ) : 'a t -> ('-> 'b) -> 'b t
        end
      val bind : 'a t -> ('-> 'b t) -> 'b t
      val return : '-> 'a t
      val map : 'a t -> f:('-> 'b) -> 'b t
      val join : 'a t t -> 'a t
      val ignore : 'a t -> unit t
      val all : 'a t List.t -> 'List.t t
      val all_ignore : unit t List.t -> unit t
    end
  val don't_wait_for : unit Deferred.t -> unit
  type 'a choice
  val choice : 'Deferred.t -> ('-> 'b) -> 'Deferred.choice
  val enabled : 'Deferred.choice list -> (unit -> 'b list) Deferred.t
  val choose : 'Deferred.choice list -> 'Deferred.t
  val repeat_until_finished :
    'state ->
    ('state -> [ `Finished of 'result | `Repeat of 'state ] Deferred.t) ->
    'result Deferred.t
  val forever : 'state -> ('state -> 'state Deferred.t) -> unit
  val debug_space_leaks : int option Pervasives.ref
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'Deferred.t -> Sexplib.Sexp.t
end