sig
  module Deferred :
    sig
      type 'a t
      val both :
        'Async.Std.Deferred.t ->
        'Async.Std.Deferred.t -> ('a * 'b) Async.Std.Deferred.t
      val all : 'Async.Std.Deferred.t list -> 'a list Async.Std.Deferred.t
      val any : 'Async.Std.Deferred.t list -> 'Async.Std.Deferred.t
      module List :
        sig
          val map :
            'a list ->
            ('-> 'Async.Std.Deferred.t) -> 'b list Async.Std.Deferred.t
          val iter :
            'a list ->
            ('-> unit Async.Std.Deferred.t) -> unit Async.Std.Deferred.t
          val fold :
            'a list ->
            '->
            ('-> '-> 'Async.Std.Deferred.t) -> 'Async.Std.Deferred.t
          val filter :
            'a list ->
            ('-> bool Async.Std.Deferred.t) -> 'a list Async.Std.Deferred.t
          val find :
            'a list ->
            ('-> bool Async.Std.Deferred.t) ->
            'a option Async.Std.Deferred.t
        end
    end
  val ( >>= ) :
    'Async.Std.Deferred.t ->
    ('-> 'Async.Std.Deferred.t) -> 'Async.Std.Deferred.t
  val ( >>| ) :
    'Async.Std.Deferred.t -> ('-> 'b) -> 'Async.Std.Deferred.t
  val return : '-> 'Async.Std.Deferred.t
  val don't_wait_for : unit Async.Std.Deferred.t -> unit
  val never : unit -> 'Async.Std.Deferred.t
  module Ivar :
    sig
      type 'a t
      val create : unit -> 'Async.Std.Ivar.t
      val read : 'Async.Std.Ivar.t -> 'Async.Std.Deferred.t
      val fill : 'Async.Std.Ivar.t -> '-> unit
      val fill_if_empty : 'Async.Std.Ivar.t -> '-> unit
      val is_full : 'Async.Std.Ivar.t -> bool
      val is_empty : 'Async.Std.Ivar.t -> bool
    end
  module Pipe :
    sig
      module Reader : sig type 'a t end
      module Writer : sig type 'a t end
      val create :
        unit -> 'Async.Std.Pipe.Reader.t * 'Async.Std.Pipe.Writer.t
      val write :
        'Async.Std.Pipe.Writer.t -> '-> unit Async.Std.Deferred.t
      val read :
        'Async.Std.Pipe.Reader.t ->
        [ `Eof | `Ok of 'a ] Async.Std.Deferred.t
    end
  val after : Core.Std.Time.Span.t -> unit Async.Std.Deferred.t
  val with_timeout :
    Core.Std.Time.Span.t ->
    'Async.Std.Deferred.t ->
    [ `Result of '| `Timeout ] Async.Std.Deferred.t
  val every :
    ?start:unit Async.Std.Deferred.t ->
    ?stop:unit Async.Std.Deferred.t ->
    Core.Std.Time.Span.t -> (unit -> unit) -> unit
  val printf : ('a, unit, string, unit) Pervasives.format4 -> 'a
  module Reader :
    sig
      type t
      val file_lines : string -> string list Async.Std.Deferred.t
      val file_contents : string -> string Async.Std.Deferred.t
      val read_line :
        Async.Std.Reader.t -> [ `Eof | `Ok of string ] Async.Std.Deferred.t
    end
  module Writer :
    sig type t val write_line : Async.Std.Writer.t -> string -> unit end
  module Socket :
    sig
      type 'a t
      val shutdown :
        'Async.Std.Socket.t -> [ `Both | `Receive | `Send ] -> unit
      module Address : sig type t end
    end
  module Tcp :
    sig
      type 'a where_to_connect
      val to_host_and_port :
        string ->
        int -> Async.Std.Socket.Address.t Async.Std.Tcp.where_to_connect
      val connect :
        'Async.Std.Tcp.where_to_connect ->
        ('Async.Std.Socket.t * Async.Std.Reader.t * Async.Std.Writer.t)
        Async.Std.Deferred.t
    end
  val try_with :
    (unit -> 'Async.Std.Deferred.t) ->
    ('a, exn) Core.Std.Result.t Async.Std.Deferred.t
end