sig
  type t = {
    file_descr : Raw_fd.File_descr.t;
    mutable info : Core.Std.Info.t;
    mutable kind : Raw_fd.Kind.t;
    mutable supports_nonblock : bool;
    mutable have_set_nonblock : bool;
    mutable state : Raw_fd.State.t;
    watching : Raw_fd.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 : 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 watching_has_changed : Raw_fd.T.t -> bool
  val set_watching_has_changed : Raw_fd.T.t -> bool -> unit
  val watching : Raw_fd.T.t -> Raw_fd.Watching.t Read_write.Mutable.t
  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 set_supports_nonblock : Raw_fd.T.t -> bool -> unit
  val kind : Raw_fd.T.t -> Raw_fd.Kind.t
  val set_kind : Raw_fd.T.t -> Raw_fd.Kind.t -> unit
  val info : Raw_fd.T.t -> Core.Std.Info.t
  val set_info : Raw_fd.T.t -> Core.Std.Info.t -> unit
  val file_descr : Raw_fd.T.t -> Raw_fd.File_descr.t
  module Fields :
    sig
      val names : string list
      val close_finished :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, unit Import.Ivar.t)
        Fieldslib.Field.t_with_perm
      val num_active_syscalls :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, int)
        Fieldslib.Field.t_with_perm
      val watching_has_changed :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
        Fieldslib.Field.t_with_perm
      val watching :
        ([< `Read | `Set_and_create ], Raw_fd.T.t,
         Raw_fd.Watching.t Read_write.Mutable.t)
        Fieldslib.Field.t_with_perm
      val state :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
        Fieldslib.Field.t_with_perm
      val have_set_nonblock :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
        Fieldslib.Field.t_with_perm
      val supports_nonblock :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
        Fieldslib.Field.t_with_perm
      val kind :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
        Fieldslib.Field.t_with_perm
      val info :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
        Fieldslib.Field.t_with_perm
      val file_descr :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.File_descr.t)
        Fieldslib.Field.t_with_perm
      val make_creator :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm ->
                    '-> ('-> Raw_fd.File_descr.t) * 'c) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm ->
              '-> ('-> Core.Std.Info.t) * 'd) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> '-> ('-> Raw_fd.Kind.t) * 'e) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm ->
                           '-> ('-> bool) * 'f) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm ->
                           '-> ('-> bool) * 'g) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm ->
               '-> ('-> Raw_fd.State.t) * 'h) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm ->
                  '-> ('-> Raw_fd.Watching.t Read_write.Mutable.t) * 'i) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm ->
                              '-> ('-> bool) * 'j) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm ->
                             '-> ('-> int) * 'k) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm ->
                        '-> ('-> unit Import.Ivar.t) * 'l) ->
        '-> ('-> Raw_fd.T.t) * 'l
      val create :
        file_descr:Raw_fd.File_descr.t ->
        info:Core.Std.Info.t ->
        kind:Raw_fd.Kind.t ->
        supports_nonblock:bool ->
        have_set_nonblock:bool ->
        state:Raw_fd.State.t ->
        watching:Raw_fd.Watching.t Read_write.Mutable.t ->
        watching_has_changed:bool ->
        num_active_syscalls:int ->
        close_finished:unit Import.Ivar.t -> Raw_fd.T.t
      val map :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> Raw_fd.File_descr.t) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> Core.Std.Info.t) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> Raw_fd.Kind.t) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> Raw_fd.State.t) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_fd.Watching.t Read_write.Mutable.t) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> int) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> unit Import.Ivar.t) ->
        Raw_fd.T.t
      val iter :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'a) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'b) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> 'c) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'd) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'e) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> 'f) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'g) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> 'h) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'i) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'j) ->
        'j
      val fold :
        init:'->
        file_descr:('->
                    ([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'b) ->
        info:('->
              ([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'c) ->
        kind:('->
              ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> 'd) ->
        supports_nonblock:('->
                           ([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'e) ->
        have_set_nonblock:('->
                           ([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'f) ->
        state:('->
               ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> 'g) ->
        watching:('->
                  ([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'h) ->
        watching_has_changed:('->
                              ([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> 'i) ->
        num_active_syscalls:('->
                             ([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'j) ->
        close_finished:('->
                        ([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'k) ->
        'k
      val map_poly :
        ([< `Read | `Set_and_create ], Raw_fd.T.t, 'a) Fieldslib.Field.user ->
        'a list
      val for_all :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> bool) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> bool) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val exists :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> bool) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> bool) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> bool) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> bool) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> bool) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> bool) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> bool) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> bool) ->
        bool
      val to_list :
        file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                     Raw_fd.File_descr.t)
                    Fieldslib.Field.t_with_perm -> 'a) ->
        info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
        kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
              Fieldslib.Field.t_with_perm -> 'a) ->
        supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'a) ->
        have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t, bool)
                           Fieldslib.Field.t_with_perm -> 'a) ->
        state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
               Fieldslib.Field.t_with_perm -> 'a) ->
        watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                   Raw_fd.Watching.t Read_write.Mutable.t)
                  Fieldslib.Field.t_with_perm -> 'a) ->
        watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                               bool)
                              Fieldslib.Field.t_with_perm -> 'a) ->
        num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t, int)
                             Fieldslib.Field.t_with_perm -> 'a) ->
        close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         unit Import.Ivar.t)
                        Fieldslib.Field.t_with_perm -> 'a) ->
        'a list
      module Direct :
        sig
          val iter :
            Raw_fd.T.t ->
            file_descr:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                         Raw_fd.File_descr.t)
                        Fieldslib.Field.t_with_perm ->
                        Raw_fd.T.t -> Raw_fd.File_descr.t -> 'a) ->
            info:(([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_fd.T.t -> Core.Std.Info.t -> 'b) ->
            kind:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_fd.T.t -> Raw_fd.Kind.t -> 'c) ->
            supports_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                                bool)
                               Fieldslib.Field.t_with_perm ->
                               Raw_fd.T.t -> bool -> 'd) ->
            have_set_nonblock:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                                bool)
                               Fieldslib.Field.t_with_perm ->
                               Raw_fd.T.t -> bool -> 'e) ->
            state:(([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
                   Fieldslib.Field.t_with_perm ->
                   Raw_fd.T.t -> Raw_fd.State.t -> 'f) ->
            watching:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                       Raw_fd.Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      Raw_fd.T.t ->
                      Raw_fd.Watching.t Read_write.Mutable.t -> 'g) ->
            watching_has_changed:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                                   bool)
                                  Fieldslib.Field.t_with_perm ->
                                  Raw_fd.T.t -> bool -> 'h) ->
            num_active_syscalls:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                                  int)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_fd.T.t -> int -> 'i) ->
            close_finished:(([< `Read | `Set_and_create ], Raw_fd.T.t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm ->
                            Raw_fd.T.t -> unit Import.Ivar.t -> 'j) ->
            'j
          val fold :
            Raw_fd.T.t ->
            init:'->
            file_descr:('->
                        ([< `Read | `Set_and_create ], Raw_fd.T.t,
                         Raw_fd.File_descr.t)
                        Fieldslib.Field.t_with_perm ->
                        Raw_fd.T.t -> Raw_fd.File_descr.t -> 'b) ->
            info:('->
                  ([< `Read | `Set_and_create ], Raw_fd.T.t, Core.Std.Info.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_fd.T.t -> Core.Std.Info.t -> 'c) ->
            kind:('->
                  ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.Kind.t)
                  Fieldslib.Field.t_with_perm ->
                  Raw_fd.T.t -> Raw_fd.Kind.t -> 'd) ->
            supports_nonblock:('->
                               ([< `Read | `Set_and_create ], Raw_fd.T.t,
                                bool)
                               Fieldslib.Field.t_with_perm ->
                               Raw_fd.T.t -> bool -> 'e) ->
            have_set_nonblock:('->
                               ([< `Read | `Set_and_create ], Raw_fd.T.t,
                                bool)
                               Fieldslib.Field.t_with_perm ->
                               Raw_fd.T.t -> bool -> 'f) ->
            state:('->
                   ([< `Read | `Set_and_create ], Raw_fd.T.t, Raw_fd.State.t)
                   Fieldslib.Field.t_with_perm ->
                   Raw_fd.T.t -> Raw_fd.State.t -> 'g) ->
            watching:('->
                      ([< `Read | `Set_and_create ], Raw_fd.T.t,
                       Raw_fd.Watching.t Read_write.Mutable.t)
                      Fieldslib.Field.t_with_perm ->
                      Raw_fd.T.t ->
                      Raw_fd.Watching.t Read_write.Mutable.t -> 'h) ->
            watching_has_changed:('->
                                  ([< `Read | `Set_and_create ], Raw_fd.T.t,
                                   bool)
                                  Fieldslib.Field.t_with_perm ->
                                  Raw_fd.T.t -> bool -> 'i) ->
            num_active_syscalls:('->
                                 ([< `Read | `Set_and_create ], Raw_fd.T.t,
                                  int)
                                 Fieldslib.Field.t_with_perm ->
                                 Raw_fd.T.t -> int -> 'j) ->
            close_finished:('->
                            ([< `Read | `Set_and_create ], Raw_fd.T.t,
                             unit Import.Ivar.t)
                            Fieldslib.Field.t_with_perm ->
                            Raw_fd.T.t -> unit Import.Ivar.t -> 'k) ->
            'k
        end
    end
end