sig
  type 'a t
  val both :
    'a Async.Std.Deferred.t ->
    'b Async.Std.Deferred.t -> ('a * 'b) Async.Std.Deferred.t
  val all : 'a Async.Std.Deferred.t list -> 'a list Async.Std.Deferred.t
  val any : 'a Async.Std.Deferred.t list -> 'a Async.Std.Deferred.t
  module List :
    sig
      val map :
        'a list ->
        ('a -> 'b Async.Std.Deferred.t) -> 'b list Async.Std.Deferred.t
      val iter :
        'a list ->
        ('a -> unit Async.Std.Deferred.t) -> unit Async.Std.Deferred.t
      val fold :
        'a list ->
        'b ->
        ('b -> 'a -> 'b Async.Std.Deferred.t) -> 'b Async.Std.Deferred.t
      val filter :
        'a list ->
        ('a -> bool Async.Std.Deferred.t) -> 'a list Async.Std.Deferred.t
      val find :
        'a list ->
        ('a -> bool Async.Std.Deferred.t) -> 'a option Async.Std.Deferred.t
    end
end