sig
  type 'a t = 'Ivar.Deferred.t
  val create : ('Ivar.t -> unit) -> 'a t
  val upon : 'a t -> ('-> unit) -> unit
  val peek : 'a t -> 'a option
  val is_determined : 'a 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 ( >>> ) : 'a t -> ('-> unit) -> unit
    end
  val unit : unit t
  val never : unit -> 'a t
  val both : 'a t -> 'b t -> ('a * 'b) t
  val all : 'a t list -> 'a list t
  val all_unit : unit t list -> unit t
  val any : 'a t list -> 'a t
  val any_unit : 'a t list -> unit 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 find : 'a t -> f:('-> bool t) -> 'a option t
      val find_map : 'a t -> f:('-> 'b option t) -> 'b option 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 find : 'a t -> f:('-> bool t) -> 'a option t
      val find_map : 'a t -> f:('-> 'b option t) -> 'b option 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 find : 'a t -> f:('-> bool t) -> 'a option t
      val find_map : 'a t -> f:('-> 'b option t) -> 'b option 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 find : 'a t -> f:('-> bool t) -> 'a option t
      val find_map : 'a t -> f:('-> 'b option t) -> 'b option t
      val all : 'a t t -> 'a t t
      val all_unit : unit t t -> unit t
    end
  module Map :
    sig
      type ('a, 'b, 'c) t = ('a, 'b, 'c) Core.Std.Map.t
      val change :
        ('k, 'v, 'comparator) t ->
        '->
        ('v option -> 'v option Deferred_intf.Deferred.t) ->
        ('k, 'v, 'comparator) t Deferred_intf.Deferred.t
      val iter :
        ?how:Deferred_intf.how ->
        ('k, 'v, 'a) t ->
        f:(key:'-> data:'-> unit Deferred_intf.Deferred.t) ->
        unit Deferred_intf.Deferred.t
      val map :
        ?how:Deferred_intf.how ->
        ('k, 'v1, 'comparator) t ->
        f:('v1 -> 'v2 Deferred_intf.Deferred.t) ->
        ('k, 'v2, 'comparator) t Deferred_intf.Deferred.t
      val mapi :
        ?how:Deferred_intf.how ->
        ('k, 'v1, 'comparator) t ->
        f:(key:'-> data:'v1 -> 'v2 Deferred_intf.Deferred.t) ->
        ('k, 'v2, 'comparator) t Deferred_intf.Deferred.t
      val fold :
        ('k, 'v, 'b) t ->
        init:'->
        f:(key:'-> data:'-> '-> 'Deferred_intf.Deferred.t) ->
        'Deferred_intf.Deferred.t
      val fold_right :
        ('k, 'v, 'b) t ->
        init:'->
        f:(key:'-> data:'-> '-> 'Deferred_intf.Deferred.t) ->
        'Deferred_intf.Deferred.t
      val filter :
        ?how:Deferred_intf.how ->
        ('k, 'v, 'comparable) t ->
        f:(key:'-> data:'-> bool Deferred_intf.Deferred.t) ->
        ('k, 'v, 'comparable) t Deferred_intf.Deferred.t
      val filter_map :
        ?how:Deferred_intf.how ->
        ('k, 'v1, 'comparable) t ->
        f:('v1 -> 'v2 option Deferred_intf.Deferred.t) ->
        ('k, 'v2, 'comparable) t Deferred_intf.Deferred.t
      val filter_mapi :
        ?how:Deferred_intf.how ->
        ('k, 'v1, 'comparable) t ->
        f:(key:'-> data:'v1 -> 'v2 option Deferred_intf.Deferred.t) ->
        ('k, 'v2, 'comparable) t Deferred_intf.Deferred.t
      val merge :
        ?how:Deferred_intf.how ->
        ('k, 'v1, 'comparator) t ->
        ('k, 'v2, 'comparator) t ->
        f:(key:'->
           [ `Both of 'v1 * 'v2 | `Left of 'v1 | `Right of 'v2 ] ->
           'v3 option Deferred_intf.Deferred.t) ->
        ('k, 'v3, 'comparator) t Deferred_intf.Deferred.t
    end
  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 -> ('a list, 'd) t
      val all_ignore : (unit, 'd) t list -> (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 -> 'a list t
      val all_ignore : unit t list -> unit t
    end
  val don't_wait_for : unit t -> unit
  type 'a choice = 'Deferred.choice
  val choice : 'a t -> ('-> 'b) -> 'b choice
  val enabled : 'b choice list -> (unit -> 'b list) t
  val choose : 'b choice list -> 'b t
  val repeat_until_finished :
    'state ->
    ('state -> [ `Finished of 'result | `Repeat of 'state ] t) -> 'result t
  val forever : 'state -> ('state -> 'state t) -> unit
  val debug_space_leaks : int option ref
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
  module Or_error :
    sig
      type 'a t = 'Core.Std.Or_error.t Deferred.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 -> 'a list t
      val all_ignore : unit t list -> unit t
      val fail : Core.Std.Error.t -> 'a t
      val ok_exn : 'a t -> 'Deferred.t
      val of_exn : exn -> 'a t
      val of_exn_result : ('a, exn) Core.Std.Result.t Deferred.t -> 'a t
      val error : string -> '-> ('-> Core.Std.Sexp.t) -> 'b t
      val error_string : string -> 'a t
      val unimplemented : string -> 'a t
      val combine_errors : 'a t list -> 'a list t
      val combine_errors_unit : unit t list -> unit t
      val ok_unit : unit t
      val try_with :
        ?extract_exn:bool -> ?name:string -> (unit -> 'Deferred.t) -> 'a t
      val try_with_join :
        ?extract_exn:bool -> ?name:string -> (unit -> 'a t) -> 'a t
      module List :
        sig
          val foldi :
            'a list -> init:'-> f:(int -> '-> '-> 'b t) -> 'b t
          val fold : 'a list -> init:'-> f:('-> '-> 'b t) -> 'b t
          val init :
            ?how:Deferred_intf.how -> int -> f:(int -> 'a t) -> 'a list t
          val iter :
            ?how:Deferred_intf.how -> 'a list -> f:('-> unit t) -> unit t
          val iteri :
            ?how:Deferred_intf.how ->
            'a list -> f:(int -> '-> unit t) -> unit t
          val map :
            ?how:Deferred_intf.how -> 'a list -> f:('-> 'b t) -> 'b list t
          val filter :
            ?how:Deferred_intf.how ->
            'a list -> f:('-> bool t) -> 'a list t
          val filter_map :
            ?how:Deferred_intf.how ->
            'a list -> f:('-> 'b option t) -> 'b list t
          val find : 'a list -> f:('-> bool t) -> 'a option t
          val find_map : 'a list -> f:('-> 'b option t) -> 'b option t
          val all : 'a t list -> 'a list t
          val all_unit : unit t list -> unit t
        end
    end
end