sig
  type ready_to_result = [ `Bad_fd | `Closed | `Interrupted | `Ready ]
  val sexp_of_ready_to_result : Raw_fd.T.ready_to_result -> Sexplib.Sexp.t
  type t = {
    name : string;
    file_descr : Raw_fd.File_descr.t;
    kind : Raw_fd.Kind.t;
    supports_nonblock : bool;
    mutable have_set_nonblock : bool;
    mutable state : Raw_fd.State.t;
    mutable num_active_syscalls : int;
    close_finished : unit Import.Ivar.t;
  }
  val sexp_of_t : Raw_fd.T.t -> Sexplib.Sexp.t
  val close_finished : Raw_fd.T.t -> unit Import.Ivar.t
  val num_active_syscalls : Raw_fd.T.t -> int
  val set_num_active_syscalls : Raw_fd.T.t -> int -> unit
  val state : Raw_fd.T.t -> Raw_fd.State.t
  val set_state : Raw_fd.T.t -> Raw_fd.State.t -> unit
  val have_set_nonblock : Raw_fd.T.t -> bool
  val set_have_set_nonblock : Raw_fd.T.t -> bool -> unit
  val supports_nonblock : Raw_fd.T.t -> bool
  val kind : Raw_fd.T.t -> Raw_fd.Kind.t
  val file_descr : Raw_fd.T.t -> Raw_fd.File_descr.t
  val name : Raw_fd.T.t -> string
  module Fields :
    sig
      val names : string list
      val close_finished : (Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t
      val num_active_syscalls : (Raw_fd.T.t, int) Fieldslib.Field.t
      val state : (Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t
      val have_set_nonblock : (Raw_fd.T.t, bool) Fieldslib.Field.t
      val supports_nonblock : (Raw_fd.T.t, bool) Fieldslib.Field.t
      val kind : (Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t
      val file_descr : (Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t
      val name : (Raw_fd.T.t, string) Fieldslib.Field.t
      val make_creator :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t ->
              '-> ('-> string) * 'c) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                    '-> ('-> Raw_fd.File_descr.t) * 'd) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t ->
              '-> ('-> Raw_fd.Kind.t) * 'e) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t ->
                           '-> ('-> bool) * 'f) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t ->
                           '-> ('-> bool) * 'g) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t ->
               '-> ('-> Raw_fd.State.t) * 'h) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t ->
                             '-> ('-> int) * 'i) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        '-> ('-> unit Import.Ivar.t) * 'j) ->
        '-> ('-> Raw_fd.T.t) * 'j
      val create :
        name:string ->
        file_descr:Raw_fd.File_descr.t ->
        kind:Raw_fd.Kind.t ->
        supports_nonblock:bool ->
        have_set_nonblock:bool ->
        state:Raw_fd.State.t ->
        num_active_syscalls:int ->
        close_finished:unit Import.Ivar.t -> Raw_fd.T.t
      val iter :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t -> 'a) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t -> 'b) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> 'c) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> 'd) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> 'e) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t -> 'f) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t -> 'g) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        'h) ->
        'h
      val fold :
        init:'->
        name:('-> (Raw_fd.T.t, string) Fieldslib.Field.t -> 'b) ->
        file_descr:('->
                    (Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t -> 'c) ->
        kind:('-> (Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> 'd) ->
        supports_nonblock:('-> (Raw_fd.T.t, bool) Fieldslib.Field.t -> 'e) ->
        have_set_nonblock:('-> (Raw_fd.T.t, bool) Fieldslib.Field.t -> 'f) ->
        state:('-> (Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t -> 'g) ->
        num_active_syscalls:('-> (Raw_fd.T.t, int) Fieldslib.Field.t -> 'h) ->
        close_finished:('->
                        (Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        'i) ->
        'i
      val map :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t -> string) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                    Raw_fd.File_descr.t) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> Raw_fd.Kind.t) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t ->
               Raw_fd.State.t) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t -> int) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        unit Import.Ivar.t) ->
        Raw_fd.T.t
      val map_poly : (Raw_fd.T.t, 'a) Fieldslib.Field.user -> 'a list
      val for_all :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t -> bool) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                    bool) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> bool) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t -> bool) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t -> bool) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        bool) ->
        bool
      val exists :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t -> bool) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                    bool) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> bool) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> bool) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t -> bool) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t -> bool) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        bool) ->
        bool
      val to_list :
        name:((Raw_fd.T.t, string) Fieldslib.Field.t -> 'a) ->
        file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t -> 'a) ->
        kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t -> 'a) ->
        supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> 'a) ->
        have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t -> 'a) ->
        state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t -> 'a) ->
        num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t -> 'a) ->
        close_finished:((Raw_fd.T.t, unit Import.Ivar.t) Fieldslib.Field.t ->
                        'a) ->
        'a list
      module Direct :
        sig
          val iter :
            Raw_fd.T.t ->
            name:((Raw_fd.T.t, string) Fieldslib.Field.t ->
                  Raw_fd.T.t -> string -> 'a) ->
            file_descr:((Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                        Raw_fd.T.t -> Raw_fd.File_descr.t -> 'b) ->
            kind:((Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t ->
                  Raw_fd.T.t -> Raw_fd.Kind.t -> 'c) ->
            supports_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t ->
                               Raw_fd.T.t -> bool -> 'd) ->
            have_set_nonblock:((Raw_fd.T.t, bool) Fieldslib.Field.t ->
                               Raw_fd.T.t -> bool -> 'e) ->
            state:((Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t ->
                   Raw_fd.T.t -> Raw_fd.State.t -> 'f) ->
            num_active_syscalls:((Raw_fd.T.t, int) Fieldslib.Field.t ->
                                 Raw_fd.T.t -> int -> 'g) ->
            close_finished:((Raw_fd.T.t, unit Import.Ivar.t)
                            Fieldslib.Field.t ->
                            Raw_fd.T.t -> unit Import.Ivar.t -> 'h) ->
            'h
          val fold :
            Raw_fd.T.t ->
            init:'->
            name:('->
                  (Raw_fd.T.t, string) Fieldslib.Field.t ->
                  Raw_fd.T.t -> string -> 'b) ->
            file_descr:('->
                        (Raw_fd.T.t, Raw_fd.File_descr.t) Fieldslib.Field.t ->
                        Raw_fd.T.t -> Raw_fd.File_descr.t -> 'c) ->
            kind:('->
                  (Raw_fd.T.t, Raw_fd.Kind.t) Fieldslib.Field.t ->
                  Raw_fd.T.t -> Raw_fd.Kind.t -> 'd) ->
            supports_nonblock:('->
                               (Raw_fd.T.t, bool) Fieldslib.Field.t ->
                               Raw_fd.T.t -> bool -> 'e) ->
            have_set_nonblock:('->
                               (Raw_fd.T.t, bool) Fieldslib.Field.t ->
                               Raw_fd.T.t -> bool -> 'f) ->
            state:('->
                   (Raw_fd.T.t, Raw_fd.State.t) Fieldslib.Field.t ->
                   Raw_fd.T.t -> Raw_fd.State.t -> 'g) ->
            num_active_syscalls:('->
                                 (Raw_fd.T.t, int) Fieldslib.Field.t ->
                                 Raw_fd.T.t -> int -> 'h) ->
            close_finished:('->
                            (Raw_fd.T.t, unit Import.Ivar.t)
                            Fieldslib.Field.t ->
                            Raw_fd.T.t -> unit Import.Ivar.t -> 'i) ->
            'i
        end
    end
end