sig
  type 'a t = ('a, Execution_context.t) Raw_deferred.t
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
  type 'a detailed = 'a t
  val sexp_of_detailed :
    ('-> Sexplib.Sexp.t) -> 'a detailed -> Sexplib.Sexp.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
  module Array :
    sig
      type 'a t = 'a array
      val fold :
        'a t ->
        init:'->
        f:('-> '-> 'Deferred_intf.Deferred.t) ->
        'Deferred_intf.Deferred.t
      val iter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> unit Deferred_intf.Deferred.t) ->
        unit Deferred_intf.Deferred.t
      val map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val filter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> bool Deferred_intf.Deferred.t) ->
        'a t Deferred_intf.Deferred.t
      val filter_map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'b option Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val all :
        'Deferred_intf.Deferred.t t -> 'a t Deferred_intf.Deferred.t
      val all_unit :
        unit Deferred_intf.Deferred.t t -> unit Deferred_intf.Deferred.t
    end
  module List :
    sig
      type 'a t = 'a list
      val fold :
        'a t ->
        init:'->
        f:('-> '-> 'Deferred_intf.Deferred.t) ->
        'Deferred_intf.Deferred.t
      val iter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> unit Deferred_intf.Deferred.t) ->
        unit Deferred_intf.Deferred.t
      val map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val filter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> bool Deferred_intf.Deferred.t) ->
        'a t Deferred_intf.Deferred.t
      val filter_map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'b option Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val all :
        'Deferred_intf.Deferred.t t -> 'a t Deferred_intf.Deferred.t
      val all_unit :
        unit Deferred_intf.Deferred.t t -> unit Deferred_intf.Deferred.t
    end
  module Queue :
    sig
      type 'a t = 'Core.Std.Queue.t
      val fold :
        'a t ->
        init:'->
        f:('-> '-> 'Deferred_intf.Deferred.t) ->
        'Deferred_intf.Deferred.t
      val iter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> unit Deferred_intf.Deferred.t) ->
        unit Deferred_intf.Deferred.t
      val map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val filter :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> bool Deferred_intf.Deferred.t) ->
        'a t Deferred_intf.Deferred.t
      val filter_map :
        ?how:Deferred_intf.how ->
        'a t ->
        f:('-> 'b option Deferred_intf.Deferred.t) ->
        'b t Deferred_intf.Deferred.t
      val all :
        'Deferred_intf.Deferred.t t -> 'a t Deferred_intf.Deferred.t
      val all_unit :
        unit Deferred_intf.Deferred.t t -> unit Deferred_intf.Deferred.t
    end
  module Map :
    sig
      type ('k, 'v) t = ('k, 'v) Core.Std.Map.Poly.t
      val filter_mapi :
        ('k, 'v1) t ->
        f:(key:'-> data:'v1 -> 'v2 option Deferred_intf.Deferred.t) ->
        ('k, 'v2) t Deferred_intf.Deferred.t
    end
  val whenever : 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 choose_ident : 'a t list -> 'a t
  val repeat_until_finished :
    'state ->
    ('state -> [ `Finished of 'result | `Repeat of 'state ] t) -> 'result t
  val debug_space_leaks : int option ref
  val ounit_tests : unit -> OUnit.test
end