sig
  type error = Unix.error * string * string
  type 'a result = [ `Error of Fut.Unix.error | `Ok of 'a ]
  val ubind :
    [> 'Fut.Unix.result ] Fut.t ->
    ('-> [> 'Fut.Unix.result ] Fut.t) -> [> 'Fut.Unix.result ] Fut.t
  val apply :
    ?queue:Fut.queue -> ('-> 'b) -> '-> [> 'Fut.Unix.result ] Fut.t
  val call : ('-> 'b) -> '-> [> 'Fut.Unix.result ] Fut.t
  val signal : int -> int Fut.t
  val nonblock_stdio : unit -> [> unit Fut.Unix.result ] Fut.t
  val close : Unix.file_descr -> [> unit Fut.Unix.result ] Fut.t
  val dup2 :
    Unix.file_descr -> Unix.file_descr -> [> unit Fut.Unix.result ] Fut.t
  val pipe :
    unit -> [> (Unix.file_descr * Unix.file_descr) Fut.Unix.result ] Fut.t
  val socket :
    Unix.socket_domain ->
    Unix.socket_type -> int -> [> Unix.file_descr Fut.Unix.result ] Fut.t
  val socketpair :
    Unix.socket_domain ->
    Unix.socket_type ->
    int -> [> (Unix.file_descr * Unix.file_descr) Fut.Unix.result ] Fut.t
  val accept : Unix.file_descr -> Unix.file_descr * Unix.sockaddr
  val connect :
    Unix.file_descr -> Unix.sockaddr -> [> unit Fut.Unix.result ] Fut.t
  val bind :
    Unix.file_descr -> Unix.sockaddr -> [ `Error of Unix.error | `Ok ] Fut.t
  val read :
    Unix.file_descr -> string -> int -> int -> [> int Fut.Unix.result ] Fut.t
  val write :
    Unix.file_descr -> string -> int -> int -> [> int Fut.Unix.result ] Fut.t
end