sig
  type fd_stat =
      Path of string
    | Socket of Procfs.Process.Inode.t
    | Pipe of Procfs.Process.Inode.t
    | Inotify
  type t = { fd : int; fd_stat : Procfs.Process.Fd.fd_stat; }
  val fd_stat : Procfs.Process.Fd.t -> Procfs.Process.Fd.fd_stat
  val fd : Procfs.Process.Fd.t -> int
  module Fields :
    sig
      val names : string list
      val fd_stat :
        (Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat) Fieldslib.Field.t
      val fd : (Procfs.Process.Fd.t, int) Fieldslib.Field.t
      val fold :
        init:'acc__ ->
        fd:('acc__ -> (Procfs.Process.Fd.t, int) Fieldslib.Field.t -> 'acc__) ->
        fd_stat:('acc__ ->
                 (Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> 'acc__) ->
        'acc__
      val make_creator :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t ->
            'compile_acc__ -> ('input__ -> int) * 'compile_acc__) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t ->
                 'compile_acc__ ->
                 ('input__ -> Procfs.Process.Fd.fd_stat) * 'compile_acc__) ->
        'compile_acc__ -> ('input__ -> Procfs.Process.Fd.t) * 'compile_acc__
      val create :
        fd:int -> fd_stat:Procfs.Process.Fd.fd_stat -> Procfs.Process.Fd.t
      val map :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t -> int) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> Procfs.Process.Fd.fd_stat) ->
        Procfs.Process.Fd.t
      val iter :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t -> unit) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> unit) ->
        unit
      val for_all :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t -> bool) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> bool) ->
        bool
      val exists :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t -> bool) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> bool) ->
        bool
      val to_list :
        fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t -> 'elem__) ->
        fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                 Fieldslib.Field.t -> 'elem__) ->
        'elem__ list
      val map_poly :
        ([< `Read | `Set_and_create ], Procfs.Process.Fd.t, 'x0)
        Fieldslib.Field.user -> 'x0 list
      module Direct :
        sig
          val iter :
            Procfs.Process.Fd.t ->
            fd:((Procfs.Process.Fd.t, int) Fieldslib.Field.t ->
                Procfs.Process.Fd.t -> int -> unit) ->
            fd_stat:((Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                     Fieldslib.Field.t ->
                     Procfs.Process.Fd.t -> Procfs.Process.Fd.fd_stat -> unit) ->
            unit
          val fold :
            Procfs.Process.Fd.t ->
            init:'acc__ ->
            fd:('acc__ ->
                (Procfs.Process.Fd.t, int) Fieldslib.Field.t ->
                Procfs.Process.Fd.t -> int -> 'acc__) ->
            fd_stat:('acc__ ->
                     (Procfs.Process.Fd.t, Procfs.Process.Fd.fd_stat)
                     Fieldslib.Field.t ->
                     Procfs.Process.Fd.t ->
                     Procfs.Process.Fd.fd_stat -> 'acc__) ->
            'acc__
        end
    end
  val fd_stat_of_sexp : Sexplib.Sexp.t -> Procfs.Process.Fd.fd_stat
  val sexp_of_fd_stat : Procfs.Process.Fd.fd_stat -> Sexplib.Sexp.t
  val t_of_sexp : Sexplib.Sexp.t -> Procfs.Process.Fd.t
  val sexp_of_t : Procfs.Process.Fd.t -> Sexplib.Sexp.t
end