sig
  type error = [ `Unix of Unix.error * string * string ]
  type ('a, 'b) result = ('a, 'b) Fut.result constraint 'b = [> Futu.error ]
  val apply :
    ?queue:Fut.queue ->
    ('-> 'b) -> '-> [> ('b, [> Futu.error ]) Futu.result ] Fut.t
  val call : ('-> 'b) -> '-> [> ('b, [> Futu.error ]) Futu.result ] Fut.t
  val signal : int -> int Fut.t
  val nonblock_stdio : unit -> [> (unit, [> Futu.error ]) Futu.result ] Fut.t
  val close :
    Unix.file_descr -> [> (unit, [> Futu.error ]) Futu.result ] Fut.t
  val dup2 :
    Unix.file_descr ->
    Unix.file_descr -> [> (unit, [> Futu.error ]) Futu.result ] Fut.t
  val pipe :
    unit ->
    [> (Unix.file_descr * Unix.file_descr, [> Futu.error ]) Futu.result ]
    Fut.t
  val socket :
    Unix.socket_domain ->
    Unix.socket_type ->
    int -> [> (Unix.file_descr, [> Futu.error ]) Futu.result ] Fut.t
  val socketpair :
    Unix.socket_domain ->
    Unix.socket_type ->
    int ->
    [> (Unix.file_descr * Unix.file_descr, [> Futu.error ]) Futu.result ]
    Fut.t
  val accept : Unix.file_descr -> Unix.file_descr * Unix.sockaddr
  val connect :
    Unix.file_descr ->
    Unix.sockaddr -> [> (unit, [> Futu.error ]) Futu.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, [> Futu.error ]) Futu.result ] Fut.t
  val write :
    Unix.file_descr ->
    string -> int -> int -> [> (int, [> Futu.error ]) Futu.result ] Fut.t
end