sig
  val debug : bool
  module File_descr :
    sig
      type t = Unix.file_descr
      module Hashable : sig type t = t end
      val hash : t -> int
      val compare : t -> t -> int
      val hashable : t Core_kernel.Std.Hashable.Hashtbl.Hashable.t
      module Table :
        sig
          type key = t
          type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Std.Hashable.Hashtbl.t
          type 'b t = (key, 'b) hashtbl
          type ('a, 'b) t_ = 'b t
          type 'a key_ = key
          val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
          val create :
            ('a key_, unit -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist :
            ('a key_,
             ('a key_ * 'b) list ->
             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_report_all_dups :
            ('a key_,
             ('a key_ * 'b) list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_exn :
            ('a key_, ('a key_ * 'b) list -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_multi :
            ('a key_, ('a key_ * 'b) list -> ('a, 'b list) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_mapped :
            ('a key_,
             get_key:('-> 'a key_) ->
             get_data:('-> 'b) ->
             'r list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_with_key :
            ('a key_,
             get_key:('-> 'a key_) ->
             'r list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_with_key_exn :
            ('a key_, get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val group :
            ('a key_,
             get_key:('-> 'a key_) ->
             get_data:('-> 'b) ->
             combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
          val clear : ('a, 'b) t_ -> unit
          val copy : ('a, 'b) t_ -> ('a, 'b) t_
          val invariant : ('a, 'b) t_ -> unit
          val fold :
            ('a, 'b) t_ ->
            init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
          val iter :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
          val existsi :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
          val length : ('a, 'b) t_ -> int
          val is_empty : ('a, 'b) t_ -> bool
          val mem : ('a, 'b) t_ -> 'a key_ -> bool
          val remove : ('a, 'b) t_ -> 'a key_ -> unit
          val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
          val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val add :
            ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
          val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val change :
            ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
          val add_multi : ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
          val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
          val map : ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_
          val mapi :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_
          val filter_map : ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_
          val filter_mapi :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_
          val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
          val filteri :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
          val partition_map :
            ('a, 'b) t_ ->
            f:('-> [ `Fst of '| `Snd of 'd ]) ->
            ('a, 'c) t_ * ('a, 'd) t_
          val partition_mapi :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
            ('a, 'c) t_ * ('a, 'd) t_
          val partition_tf :
            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
          val partitioni_tf :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
          val find_or_add :
            ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
          val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
          val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
          val merge :
            ('k, 'a) t_ ->
            ('k, 'b) t_ ->
            f:(key:'k key_ ->
               [ `Both of 'a * '| `Left of '| `Right of 'b ] -> 'c option) ->
            ('k, 'c) t_
          val merge_into :
            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
          val keys : ('a, 'b) t_ -> 'a key_ list
          val data : ('a, 'b) t_ -> 'b list
          val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
          val filteri_inplace :
            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
          val equal :
            ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
          val similar :
            ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
          val validate :
            name:('a key_ -> string) ->
            'Core_kernel.Validate.check ->
            ('a, 'b) t_ Core_kernel.Validate.check
          val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
          val t_of_sexp : (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
          val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
        end
      module Pooled_hashtbl :
        sig
          type key = t
          type ('a, 'b) hashtbl = ('a, 'b) Core_kernel.Pooled_hashtbl.t
          type 'b t = (key, 'b) hashtbl
          type ('a, 'b) t_ = 'b t
          type 'a key_ = key
          val hashable : key Core_kernel.Core_hashtbl_intf.Hashable.t
          val create :
            ('a key_, unit -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist :
            ('a key_,
             ('a key_ * 'b) list ->
             [ `Duplicate_key of 'a key_ | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_report_all_dups :
            ('a key_,
             ('a key_ * 'b) list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_exn :
            ('a key_, ('a key_ * 'b) list -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val of_alist_multi :
            ('a key_, ('a key_ * 'b) list -> ('a, 'b list) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_mapped :
            ('a key_,
             get_key:('-> 'a key_) ->
             get_data:('-> 'b) ->
             'r list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'b) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_with_key :
            ('a key_,
             get_key:('-> 'a key_) ->
             'r list ->
             [ `Duplicate_keys of 'a key_ list | `Ok of ('a, 'r) t_ ])
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val create_with_key_exn :
            ('a key_, get_key:('-> 'a key_) -> 'r list -> ('a, 'r) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val group :
            ('a key_,
             get_key:('-> 'a key_) ->
             get_data:('-> 'b) ->
             combine:('-> '-> 'b) -> 'r list -> ('a, 'b) t_)
            Core_kernel.Core_hashtbl_intf.create_options_without_hashable
          val sexp_of_key : ('a, 'b) t_ -> 'a key_ -> Sexplib.Sexp.t
          val clear : ('a, 'b) t_ -> unit
          val copy : ('a, 'b) t_ -> ('a, 'b) t_
          val invariant : ('a, 'b) t_ -> unit
          val fold :
            ('a, 'b) t_ ->
            init:'-> f:(key:'a key_ -> data:'-> '-> 'c) -> 'c
          val iter :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> unit) -> unit
          val existsi :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> bool
          val exists : ('a, 'b) t_ -> f:('-> bool) -> bool
          val length : ('a, 'b) t_ -> int
          val is_empty : ('a, 'b) t_ -> bool
          val mem : ('a, 'b) t_ -> 'a key_ -> bool
          val remove : ('a, 'b) t_ -> 'a key_ -> unit
          val remove_one : ('a, 'b list) t_ -> 'a key_ -> unit
          val replace : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val set : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val add :
            ('a, 'b) t_ -> key:'a key_ -> data:'-> [ `Duplicate | `Ok ]
          val add_exn : ('a, 'b) t_ -> key:'a key_ -> data:'-> unit
          val change :
            ('a, 'b) t_ -> 'a key_ -> ('b option -> 'b option) -> unit
          val add_multi : ('a, 'b list) t_ -> key:'a key_ -> data:'-> unit
          val remove_multi : ('a, 'b list) t_ -> 'a key_ -> unit
          val map : ('a, 'b) t_ -> f:('-> 'c) -> ('a, 'c) t_
          val mapi :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> 'c) -> ('a, 'c) t_
          val filter_map : ('a, 'b) t_ -> f:('-> 'c option) -> ('a, 'c) t_
          val filter_mapi :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> 'c option) -> ('a, 'c) t_
          val filter : ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_
          val filteri :
            ('a, 'b) t_ -> f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_
          val partition_map :
            ('a, 'b) t_ ->
            f:('-> [ `Fst of '| `Snd of 'd ]) ->
            ('a, 'c) t_ * ('a, 'd) t_
          val partition_mapi :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> [ `Fst of '| `Snd of 'd ]) ->
            ('a, 'c) t_ * ('a, 'd) t_
          val partition_tf :
            ('a, 'b) t_ -> f:('-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
          val partitioni_tf :
            ('a, 'b) t_ ->
            f:(key:'a key_ -> data:'-> bool) -> ('a, 'b) t_ * ('a, 'b) t_
          val find_or_add :
            ('a, 'b) t_ -> 'a key_ -> default:(unit -> 'b) -> 'b
          val find : ('a, 'b) t_ -> 'a key_ -> 'b option
          val find_exn : ('a, 'b) t_ -> 'a key_ -> 'b
          val find_and_remove : ('a, 'b) t_ -> 'a key_ -> 'b option
          val iter_vals : ('a, 'b) t_ -> f:('-> unit) -> unit
          val merge :
            ('k, 'a) t_ ->
            ('k, 'b) t_ ->
            f:(key:'k key_ ->
               [ `Both of 'a * '| `Left of '| `Right of 'b ] -> 'c option) ->
            ('k, 'c) t_
          val merge_into :
            f:(key:'a key_ -> '-> 'b option -> 'b option) ->
            src:('a, 'b) t_ -> dst:('a, 'b) t_ -> unit
          val keys : ('a, 'b) t_ -> 'a key_ list
          val data : ('a, 'b) t_ -> 'b list
          val filter_inplace : ('a, 'b) t_ -> f:('-> bool) -> unit
          val filteri_inplace :
            ('a, 'b) t_ -> f:('a key_ -> '-> bool) -> unit
          val equal :
            ('a, 'b) t_ -> ('a, 'b) t_ -> ('-> '-> bool) -> bool
          val similar :
            ('a, 'b1) t_ -> ('a, 'b2) t_ -> ('b1 -> 'b2 -> bool) -> bool
          val to_alist : ('a, 'b) t_ -> ('a key_ * 'b) list
          val validate :
            name:('a key_ -> string) ->
            'Core_kernel.Validate.check ->
            ('a, 'b) t_ Core_kernel.Validate.check
          val incr : ?by:int -> ('a, int) t_ -> 'a key_ -> unit
          val t_of_sexp : (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> 'b t
          val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'b t -> Sexplib.Sexp.t
        end
      module Hash_set :
        sig
          type elt = t
          type 'a hash_set = 'Core_kernel.Hash_set.t
          type t = elt hash_set
          type 'a t_ = t
          type 'a elt_ = elt
          val create :
            ('a, unit -> 'a t_)
            Core_kernel.Hash_set_intf.create_options_without_hashable
          val of_list :
            ('a, 'a elt_ list -> 'a t_)
            Core_kernel.Hash_set_intf.create_options_without_hashable
          val t_of_sexp : Sexplib.Sexp.t -> t
          val sexp_of_t : t -> Sexplib.Sexp.t
        end
      module Hash_queue :
        sig
          module Key :
            sig
              type t = t
              val compare : t -> t -> int
              val hash : t -> int
              val t_of_sexp : Sexplib.Sexp.t -> t
              val sexp_of_t : t -> Sexplib.Sexp.t
            end
          type 'a t = 'Core.Core_unix.File_descr.Hash_queue.t
          val length : 'a t -> int
          val is_empty : 'a t -> bool
          val iter : 'a t -> f:('-> unit) -> unit
          val fold :
            'a t -> init:'accum -> f:('accum -> '-> 'accum) -> 'accum
          val exists : 'a t -> f:('-> bool) -> bool
          val for_all : 'a t -> f:('-> bool) -> bool
          val count : 'a t -> f:('-> bool) -> int
          val find : 'a t -> f:('-> bool) -> 'a option
          val find_map : 'a t -> f:('-> 'b option) -> 'b option
          val to_list : 'a t -> 'a list
          val to_array : 'a t -> 'a array
          val invariant : 'a t -> unit
          val create : unit -> 'a t
          val clear : 'a t -> unit
          val mem : 'a t -> Key.t -> bool
          val lookup : 'a t -> Key.t -> 'a option
          val lookup_exn : 'a t -> Key.t -> 'a
          val enqueue : 'a t -> Key.t -> '-> [ `Key_already_present | `Ok ]
          val enqueue_exn : 'a t -> Key.t -> '-> unit
          val first : 'a t -> 'a option
          val keys : 'a t -> Key.t list
          val dequeue : 'a t -> 'a option
          val dequeue_exn : 'a t -> 'a
          val dequeue_with_key : 'a t -> (Key.t * 'a) option
          val dequeue_with_key_exn : 'a t -> Key.t * 'a
          val dequeue_all : 'a t -> f:('-> unit) -> unit
          val remove : 'a t -> Key.t -> [ `No_such_key | `Ok ]
          val remove_exn : 'a t -> Key.t -> unit
          val replace : 'a t -> Key.t -> '-> [ `No_such_key | `Ok ]
          val replace_exn : 'a t -> Key.t -> '-> unit
          val iteri : 'a t -> f:(key:Key.t -> data:'-> unit) -> unit
          val foldi :
            'a t -> init:'-> f:('-> key:Key.t -> data:'-> 'b) -> 'b
        end
      val of_string : string -> t
      val to_string : t -> string
      val of_int : int -> t
      val to_int : t -> int
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
      val bin_t : t Core_kernel.Std.Bin_prot.Type_class.t
      val bin_read_t : t Core_kernel.Std.Bin_prot.Read.reader
      val __bin_read_t__ : (int -> t) Core_kernel.Std.Bin_prot.Read.reader
      val bin_reader_t : t Core_kernel.Std.Bin_prot.Type_class.reader
      val bin_size_t : t Core_kernel.Std.Bin_prot.Size.sizer
      val bin_write_t : t Core_kernel.Std.Bin_prot.Write.writer
      val bin_writer_t : t Core_kernel.Std.Bin_prot.Type_class.writer
    end
  module Kind :
    sig
      type t =
        Raw_fd.Kind.t =
          Char
        | Fifo
        | File
        | Socket of [ `Active | `Bound | `Passive | `Unconnected ]
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  module State :
    sig
      type t =
        Raw_fd.State.t =
          Close_requested of (unit -> unit Import.Deferred.t)
        | Closed
        | Open
      val sexp_of_t : t -> Sexplib.Sexp.t
      val transition_is_allowed : t -> t -> bool
      val is_open : t -> bool
    end
  type ready_to_result = [ `Bad_fd | `Closed | `Interrupted | `Ready ]
  val sexp_of_ready_to_result :
    [< `Bad_fd | `Closed | `Interrupted | `Ready ] -> Sexplib.Sexp.t
  module Watching :
    sig
      type t =
        Raw_fd.Watching.t =
          Not_watching
        | Watch_once of ready_to_result Import.Ivar.t
        | Watch_repeatedly of Async_core.Job.t *
            [ `Bad_fd | `Closed | `Interrupted ] Import.Ivar.t
        | Stop_requested
      val sexp_of_t : t -> Sexplib.Sexp.t
      val invariant : t -> unit
    end
  module T :
    sig
      type t =
        Raw_fd.T.t = {
        file_descr : File_descr.t;
        mutable info : Core.Std.Info.t;
        mutable kind : Kind.t;
        mutable supports_nonblock : bool;
        mutable have_set_nonblock : bool;
        mutable state : State.t;
        watching : Watching.t Read_write.Mutable.t;
        mutable watching_has_changed : bool;
        mutable num_active_syscalls : int;
        close_finished : unit Import.Ivar.t;
      }
      val sexp_of_t : t -> Sexplib.Sexp.t
      val close_finished : t -> unit Import.Ivar.t
      val num_active_syscalls : t -> int
      val set_num_active_syscalls : t -> int -> unit
      val watching_has_changed : t -> bool
      val set_watching_has_changed : t -> bool -> unit
      val watching : t -> Watching.t Read_write.Mutable.t
      val state : t -> State.t
      val set_state : t -> State.t -> unit
      val have_set_nonblock : t -> bool
      val set_have_set_nonblock : t -> bool -> unit
      val supports_nonblock : t -> bool
      val set_supports_nonblock : t -> bool -> unit
      val kind : t -> Kind.t
      val set_kind : t -> Kind.t -> unit
      val info : t -> Core.Std.Info.t
      val set_info : t -> Core.Std.Info.t -> unit
      val file_descr : t -> File_descr.t
      module Fields :
        sig
          val names : string list
          val close_finished :
            ([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
            Fieldslib.Field.t_with_perm
          val num_active_syscalls :
            ([< `Read | `Set_and_create ], t, int)
            Fieldslib.Field.t_with_perm
          val watching_has_changed :
            ([< `Read | `Set_and_create ], t, bool)
            Fieldslib.Field.t_with_perm
          val watching :
            ([< `Read | `Set_and_create ], t,
             Watching.t Read_write.Mutable.t)
            Fieldslib.Field.t_with_perm
          val state :
            ([< `Read | `Set_and_create ], t, State.t)
            Fieldslib.Field.t_with_perm
          val have_set_nonblock :
            ([< `Read | `Set_and_create ], t, bool)
            Fieldslib.Field.t_with_perm
          val supports_nonblock :
            ([< `Read | `Set_and_create ], t, bool)
            Fieldslib.Field.t_with_perm
          val kind :
            ([< `Read | `Set_and_create ], t, Kind.t)
            Fieldslib.Field.t_with_perm
          val info :
            ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
            Fieldslib.Field.t_with_perm
          val file_descr :
            ([< `Read | `Set_and_create ], t, File_descr.t)
            Fieldslib.Field.t_with_perm
          val make_creator :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm ->
                        '-> ('-> File_descr.t) * 'c) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm ->
                  '-> ('-> Core.Std.Info.t) * 'd) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> '-> ('-> Kind.t) * 'e) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm ->
                               '-> ('-> bool) * 'f) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm ->
                               '-> ('-> bool) * 'g) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> '-> ('-> State.t) * 'h) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      '-> ('-> Watching.t Read_write.Mutable.t) * 'i) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm ->
                                  '-> ('-> bool) * 'j) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm ->
                                 '-> ('-> int) * 'k) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm ->
                            '-> ('-> unit Import.Ivar.t) * 'l) ->
            '-> ('-> t) * 'l
          val create :
            file_descr:File_descr.t ->
            info:Core.Std.Info.t ->
            kind:Kind.t ->
            supports_nonblock:bool ->
            have_set_nonblock:bool ->
            state:State.t ->
            watching:Watching.t Read_write.Mutable.t ->
            watching_has_changed:bool ->
            num_active_syscalls:int -> close_finished:unit Import.Ivar.t -> t
          val map :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> File_descr.t) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> Core.Std.Info.t) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> Kind.t) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> State.t) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      Watching.t Read_write.Mutable.t) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> bool) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> int) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> unit Import.Ivar.t) ->
            t
          val iter :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> 'a) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> 'b) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> 'c) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'd) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'e) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> 'f) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm -> 'g) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> 'h) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> 'i) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> 'j) ->
            'j
          val fold :
            init:'->
            file_descr:('->
                        ([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> 'b) ->
            info:('->
                  ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> 'c) ->
            kind:('->
                  ([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> 'd) ->
            supports_nonblock:('->
                               ([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'e) ->
            have_set_nonblock:('->
                               ([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'f) ->
            state:('->
                   ([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> 'g) ->
            watching:('->
                      ([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm -> 'h) ->
            watching_has_changed:('->
                                  ([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> 'i) ->
            num_active_syscalls:('->
                                 ([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> 'j) ->
            close_finished:('->
                            ([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> 'k) ->
            'k
          val map_poly :
            ([< `Read | `Set_and_create ], t, 'a) Fieldslib.Field.user ->
            'a list
          val for_all :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> bool) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm -> bool) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> bool) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> bool) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> bool) ->
            bool
          val exists :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> bool) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> bool) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm -> bool) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> bool) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> bool) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> bool) ->
            bool
          val to_list :
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm -> 'a) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> 'a) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> 'a) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'a) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> 'a) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> 'a) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm -> 'a) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm -> 'a) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm -> 'a) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm -> 'a) ->
            'a list
          module Direct :
            sig
              val iter :
                t ->
                file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                            Fieldslib.Field.t_with_perm ->
                            t -> File_descr.t -> 'a) ->
                info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                      Fieldslib.Field.t_with_perm ->
                      t -> Core.Std.Info.t -> 'b) ->
                kind:(([< `Read | `Set_and_create ], t, Kind.t)
                      Fieldslib.Field.t_with_perm -> t -> Kind.t -> 'c) ->
                supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   t -> bool -> 'd) ->
                have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   t -> bool -> 'e) ->
                state:(([< `Read | `Set_and_create ], t, State.t)
                       Fieldslib.Field.t_with_perm -> t -> State.t -> 'f) ->
                watching:(([< `Read | `Set_and_create ], t,
                           Watching.t Read_write.Mutable.t)
                          Fieldslib.Field.t_with_perm ->
                          t -> Watching.t Read_write.Mutable.t -> 'g) ->
                watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                      Fieldslib.Field.t_with_perm ->
                                      t -> bool -> 'h) ->
                num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                     Fieldslib.Field.t_with_perm ->
                                     t -> int -> 'i) ->
                close_finished:(([< `Read | `Set_and_create ], t,
                                 unit Import.Ivar.t)
                                Fieldslib.Field.t_with_perm ->
                                t -> unit Import.Ivar.t -> 'j) ->
                'j
              val fold :
                t ->
                init:'->
                file_descr:('->
                            ([< `Read | `Set_and_create ], t, File_descr.t)
                            Fieldslib.Field.t_with_perm ->
                            t -> File_descr.t -> 'b) ->
                info:('->
                      ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                      Fieldslib.Field.t_with_perm ->
                      t -> Core.Std.Info.t -> 'c) ->
                kind:('->
                      ([< `Read | `Set_and_create ], t, Kind.t)
                      Fieldslib.Field.t_with_perm -> t -> Kind.t -> 'd) ->
                supports_nonblock:('->
                                   ([< `Read | `Set_and_create ], t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   t -> bool -> 'e) ->
                have_set_nonblock:('->
                                   ([< `Read | `Set_and_create ], t, bool)
                                   Fieldslib.Field.t_with_perm ->
                                   t -> bool -> 'f) ->
                state:('->
                       ([< `Read | `Set_and_create ], t, State.t)
                       Fieldslib.Field.t_with_perm -> t -> State.t -> 'g) ->
                watching:('->
                          ([< `Read | `Set_and_create ], t,
                           Watching.t Read_write.Mutable.t)
                          Fieldslib.Field.t_with_perm ->
                          t -> Watching.t Read_write.Mutable.t -> 'h) ->
                watching_has_changed:('->
                                      ([< `Read | `Set_and_create ], t, bool)
                                      Fieldslib.Field.t_with_perm ->
                                      t -> bool -> 'i) ->
                num_active_syscalls:('->
                                     ([< `Read | `Set_and_create ], t, int)
                                     Fieldslib.Field.t_with_perm ->
                                     t -> int -> 'j) ->
                close_finished:('->
                                ([< `Read | `Set_and_create ], t,
                                 unit Import.Ivar.t)
                                Fieldslib.Field.t_with_perm ->
                                t -> unit Import.Ivar.t -> 'k) ->
                'k
            end
        end
    end
  type t =
    T.t = {
    file_descr : File_descr.t;
    mutable info : Core.Std.Info.t;
    mutable kind : Kind.t;
    mutable supports_nonblock : bool;
    mutable have_set_nonblock : bool;
    mutable state : State.t;
    watching : Watching.t Read_write.Mutable.t;
    mutable watching_has_changed : bool;
    mutable num_active_syscalls : int;
    close_finished : unit Import.Ivar.t;
  }
  val sexp_of_t : t -> Sexplib.Sexp.t
  val close_finished : t -> unit Import.Ivar.t
  val num_active_syscalls : t -> int
  val set_num_active_syscalls : t -> int -> unit
  val watching_has_changed : t -> bool
  val set_watching_has_changed : t -> bool -> unit
  val watching : t -> Watching.t Read_write.Mutable.t
  val state : t -> State.t
  val have_set_nonblock : t -> bool
  val set_have_set_nonblock : t -> bool -> unit
  val supports_nonblock : t -> bool
  val set_supports_nonblock : t -> bool -> unit
  val kind : t -> Kind.t
  val set_kind : t -> Kind.t -> unit
  val info : t -> Core.Std.Info.t
  val set_info : t -> Core.Std.Info.t -> unit
  val file_descr : t -> File_descr.t
  module Fields :
    sig
      val names : string list
      val close_finished :
        ([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
        Fieldslib.Field.t_with_perm
      val num_active_syscalls :
        ([< `Read | `Set_and_create ], t, int) Fieldslib.Field.t_with_perm
      val watching_has_changed :
        ([< `Read | `Set_and_create ], t, bool) Fieldslib.Field.t_with_perm
      val watching :
        ([< `Read | `Set_and_create ], t, Watching.t Read_write.Mutable.t)
        Fieldslib.Field.t_with_perm
      val state :
        ([< `Read | `Set_and_create ], t, State.t)
        Fieldslib.Field.t_with_perm
      val have_set_nonblock :
        ([< `Read | `Set_and_create ], t, bool) Fieldslib.Field.t_with_perm
      val supports_nonblock :
        ([< `Read | `Set_and_create ], t, bool) Fieldslib.Field.t_with_perm
      val kind :
        ([< `Read | `Set_and_create ], t, Kind.t) Fieldslib.Field.t_with_perm
      val info :
        ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
        Fieldslib.Field.t_with_perm
      val file_descr :
        ([< `Read | `Set_and_create ], t, File_descr.t)
        Fieldslib.Field.t_with_perm
      val make_creator :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm ->
                    '-> ('-> File_descr.t) * 'c) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm ->
              '-> ('-> Core.Std.Info.t) * 'd) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> '-> ('-> Kind.t) * 'e) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm ->
                           '-> ('-> bool) * 'f) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm ->
                           '-> ('-> bool) * 'g) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> '-> ('-> State.t) * 'h) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm ->
                  '-> ('-> Watching.t Read_write.Mutable.t) * 'i) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm ->
                              '-> ('-> bool) * 'j) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm ->
                             '-> ('-> int) * 'k) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm ->
                        '-> ('-> unit Import.Ivar.t) * 'l) ->
        '-> ('-> t) * 'l
      val create :
        file_descr:File_descr.t ->
        info:Core.Std.Info.t ->
        kind:Kind.t ->
        supports_nonblock:bool ->
        have_set_nonblock:bool ->
        state:State.t ->
        watching:Watching.t Read_write.Mutable.t ->
        watching_has_changed:bool ->
        num_active_syscalls:int -> close_finished:unit Import.Ivar.t -> t
      val map :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> File_descr.t) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> Core.Std.Info.t) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> Kind.t) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> State.t) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm ->
                  Watching.t Read_write.Mutable.t) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> int) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> unit Import.Ivar.t) ->
        t
      val iter :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'a) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'b) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> 'c) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'd) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'e) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> 'f) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'g) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> 'h) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> 'i) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'j) ->
        'j
      val fold :
        init:'->
        file_descr:('->
                    ([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'b) ->
        info:('->
              ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'c) ->
        kind:('->
              ([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> 'd) ->
        supports_nonblock:('->
                           ([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'e) ->
        have_set_nonblock:('->
                           ([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'f) ->
        state:('->
               ([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> 'g) ->
        watching:('->
                  ([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'h) ->
        watching_has_changed:('->
                              ([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> 'i) ->
        num_active_syscalls:('->
                             ([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> 'j) ->
        close_finished:('->
                        ([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'k) ->
        'k
      val map_poly :
        ([< `Read | `Set_and_create ], t, 'a) Fieldslib.Field.user -> 'a list
      val for_all :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> bool) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> bool) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val exists :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> bool) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> bool) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val to_list :
        file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'a) ->
        info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
        kind:(([< `Read | `Set_and_create ], t, Kind.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
        supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'a) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                           Fieldslib.Field.t_with_perm -> 'a) ->
        state:(([< `Read | `Set_and_create ], t, State.t)
               Fieldslib.Field.t_with_perm -> 'a) ->
        watching:(([< `Read | `Set_and_create ], t,
                   Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'a) ->
        watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                              Fieldslib.Field.t_with_perm -> 'a) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                             Fieldslib.Field.t_with_perm -> 'a) ->
        close_finished:(([< `Read | `Set_and_create ], t, unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'a) ->
        'a list
      module Direct :
        sig
          val iter :
            t ->
            file_descr:(([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm ->
                        t -> File_descr.t -> 'a) ->
            info:(([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> t -> Core.Std.Info.t -> 'b) ->
            kind:(([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> t -> Kind.t -> 'c) ->
            supports_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> t -> bool -> 'd) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> t -> bool -> 'e) ->
            state:(([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> t -> State.t -> 'f) ->
            watching:(([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      t -> Watching.t Read_write.Mutable.t -> 'g) ->
            watching_has_changed:(([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm ->
                                  t -> bool -> 'h) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm ->
                                 t -> int -> 'i) ->
            close_finished:(([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm ->
                            t -> unit Import.Ivar.t -> 'j) ->
            'j
          val fold :
            t ->
            init:'->
            file_descr:('->
                        ([< `Read | `Set_and_create ], t, File_descr.t)
                        Fieldslib.Field.t_with_perm ->
                        t -> File_descr.t -> 'b) ->
            info:('->
                  ([< `Read | `Set_and_create ], t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm -> t -> Core.Std.Info.t -> 'c) ->
            kind:('->
                  ([< `Read | `Set_and_create ], t, Kind.t)
                  Fieldslib.Field.t_with_perm -> t -> Kind.t -> 'd) ->
            supports_nonblock:('->
                               ([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> t -> bool -> 'e) ->
            have_set_nonblock:('->
                               ([< `Read | `Set_and_create ], t, bool)
                               Fieldslib.Field.t_with_perm -> t -> bool -> 'f) ->
            state:('->
                   ([< `Read | `Set_and_create ], t, State.t)
                   Fieldslib.Field.t_with_perm -> t -> State.t -> 'g) ->
            watching:('->
                      ([< `Read | `Set_and_create ], t,
                       Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      t -> Watching.t Read_write.Mutable.t -> 'h) ->
            watching_has_changed:('->
                                  ([< `Read | `Set_and_create ], t, bool)
                                  Fieldslib.Field.t_with_perm ->
                                  t -> bool -> 'i) ->
            num_active_syscalls:('->
                                 ([< `Read | `Set_and_create ], t, int)
                                 Fieldslib.Field.t_with_perm ->
                                 t -> int -> 'j) ->
            close_finished:('->
                            ([< `Read | `Set_and_create ], t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm ->
                            t -> unit Import.Ivar.t -> 'k) ->
            'k
        end
    end
  val equal : t -> t -> bool
  val invariant : t -> unit
  val to_int : t -> int
  val create : Kind.t -> File_descr.t -> Core.Std.Info.t -> t
  val inc_num_active_syscalls : t -> [> `Already_closed | `Ok ]
  val set_state : t -> State.t -> unit
  val is_open : t -> bool
  val is_closed : t -> bool
  val set_nonblock_if_necessary : ?nonblocking:bool -> t -> unit
  val with_file_descr_exn :
    ?nonblocking:bool -> t -> (File_descr.t -> 'a) -> 'a
  val with_file_descr :
    ?nonblocking:bool ->
    t ->
    (File_descr.t -> 'a) -> [> `Already_closed | `Error of exn | `Ok of 'a ]
  val syscall :
    ?nonblocking:bool ->
    t ->
    (File_descr.t -> 'a) -> [> `Already_closed | `Error of exn | `Ok of 'a ]
  val syscall_exn : ?nonblocking:bool -> t -> (File_descr.t -> 'a) -> 'a
end