sig
  type label = ..
  val add_label_string : Line.label -> string -> unit
  val string_of_label : Line.label -> string
  module Fields :
    sig
      type 'a key
      module Key :
        sig
          type 'a info = label
          val create : 'a info -> 'a key
          val info : 'a key -> 'a info
          type t
          val hide_type : 'a key -> t
          val equal : t -> t -> bool
          val compare : t -> t -> int
        end
      type t
      val empty : t
      val is_empty : t -> bool
      val mem : 'a key -> t -> bool
      val add : 'a key -> '-> t -> t
      val singleton : 'a key -> '-> t
      val rem : 'a key -> t -> t
      val find : 'a key -> t -> 'a option
      val get : 'a key -> t -> 'a
      type binding = B : 'a key * '-> binding
      val iter : (binding -> unit) -> t -> unit
      val fold : (binding -> '-> 'a) -> t -> '-> 'a
      val for_all : (binding -> bool) -> t -> bool
      val exists : (binding -> bool) -> t -> bool
      val filter : (binding -> bool) -> t -> t
      val cardinal : t -> int
      val any_binding : t -> binding option
      val get_any_binding : t -> binding
    end
  exception Field_not_found of Line.label
  type t = Line.Fields.t
  val line : ?after:string -> ?before:string -> string -> Line.t
  val pp : Format.formatter -> Line.t -> unit
  val raw : Line.t -> string
  val set_raw : string -> Line.t -> Line.t
  val show : Line.t -> string
  val set_show : string -> Line.t -> Line.t
  val select : (Line.t -> string) -> Line.t -> Line.t
  type source =
      [ `Command of string
      | `Directory of string
      | `File of string
      | `None
      | `Other of string
      | `Process of Proc.execspec ]
  val source : Line.t -> Line.source
  val set_source : Line.source -> Line.t -> Line.t
  val seq : Line.t -> int
  val set_seq : int -> Line.t -> Line.t
  val after : Line.t -> string
  val set_after : string -> Line.t -> Line.t
  val before : Line.t -> string
  val set_before : string -> Line.t -> Line.t
  module Key_value :
    sig
      val key : Line.t -> string
      val set_key : string -> Line.t -> Line.t
      val value : Line.t -> string
      val set_value : string -> Line.t -> Line.t
      val as_int : Line.t -> int option
      val as_float : Line.t -> float option
      val as_bool : Line.t -> bool option
      val as_string : ?quoted:bool -> Line.t -> string
      val as_list : ?delim:char -> Line.t -> string list
      val section : Line.t -> string
      val set_section : string -> Line.t -> Line.t
      val create : key:string -> value:string -> Line.t -> Line.t
    end
  module Delim :
    sig
      val fields : Line.t -> string array
      val set_fields : string array -> Line.t -> Line.t
      val names : Line.t -> string list
      val set_names : string list -> Line.t -> Line.t
      val get : string -> Line.t -> string
      val get_int : string -> Line.t -> int
      val get_float : string -> Line.t -> float
      val options : Line.t -> Delimited.options
      val set_options : Delimited.options -> Line.t -> Line.t
      val output : Pervasives.out_channel -> Line.t -> unit
      val create : fields:string array -> Line.t -> Line.t
    end
  module Passwd :
    sig
      val name : Line.t -> string
      val set_name : string -> Line.t -> Line.t
      val passwd : Line.t -> string
      val set_passwd : string -> Line.t -> Line.t
      val uid : Line.t -> int
      val set_uid : int -> Line.t -> Line.t
      val gid : Line.t -> int
      val set_gid : int -> Line.t -> Line.t
      val gecos : Line.t -> string
      val set_gecos : string -> Line.t -> Line.t
      val home : Line.t -> string
      val set_home : string -> Line.t -> Line.t
      val shell : Line.t -> string
      val set_shell : string -> Line.t -> Line.t
      val create :
        name:string ->
        passwd:string ->
        uid:int ->
        gid:int ->
        gecos:string -> home:string -> shell:string -> Line.t -> Line.t
    end
  module Group :
    sig
      val name : Line.t -> string
      val set_name : string -> Line.t -> Line.t
      val passwd : Line.t -> string
      val set_passwd : string -> Line.t -> Line.t
      val gid : Line.t -> int
      val set_gid : int -> Line.t -> Line.t
      val users : Line.t -> string list
      val set_users : string list -> Line.t -> Line.t
      val create :
        name:string ->
        passwd:string -> gid:int -> users:string list -> Line.t -> Line.t
    end
  module Stat :
    sig
      val dev : Line.t -> int
      val set_dev : int -> Line.t -> Line.t
      val inode : Line.t -> int
      val set_inode : int -> Line.t -> Line.t
      val kind : Line.t -> Unix.file_kind
      val set_kind : Unix.file_kind -> Line.t -> Line.t
      module Mode :
        sig
          val xusr : Line.t -> bool
          val set_xusr : bool -> Line.t -> Line.t
          val wusr : Line.t -> bool
          val set_wusr : bool -> Line.t -> Line.t
          val rusr : Line.t -> bool
          val set_rusr : bool -> Line.t -> Line.t
          val xgrp : Line.t -> bool
          val set_xgrp : bool -> Line.t -> Line.t
          val wgrp : Line.t -> bool
          val set_wgrp : bool -> Line.t -> Line.t
          val rgrp : Line.t -> bool
          val set_rgrp : bool -> Line.t -> Line.t
          val xoth : Line.t -> bool
          val set_xoth : bool -> Line.t -> Line.t
          val woth : Line.t -> bool
          val set_woth : bool -> Line.t -> Line.t
          val roth : Line.t -> bool
          val set_roth : bool -> Line.t -> Line.t
          val suid : Line.t -> bool
          val set_suid : bool -> Line.t -> Line.t
          val sgid : Line.t -> bool
          val set_sgid : bool -> Line.t -> Line.t
          val sticky : Line.t -> bool
          val set_sticky : bool -> Line.t -> Line.t
          val bits : Line.t -> int
          val set_bits : int -> Line.t -> Line.t
          val create :
            xusr:bool ->
            wusr:bool ->
            rusr:bool ->
            xgrp:bool ->
            wgrp:bool ->
            rgrp:bool ->
            xoth:bool ->
            woth:bool ->
            roth:bool ->
            suid:bool ->
            sgid:bool -> sticky:bool -> bits:int -> Line.t -> Line.t
        end
      val nlink : Line.t -> int
      val set_nlink : int -> Line.t -> Line.t
      val uid : Line.t -> int
      val set_uid : int -> Line.t -> Line.t
      val gid : Line.t -> int
      val set_gid : int -> Line.t -> Line.t
      val rdev : Line.t -> int
      val set_rdev : int -> Line.t -> Line.t
      val size : Line.t -> int
      val set_size : int -> Line.t -> Line.t
      val blksize : Line.t -> int
      val set_blksize : int -> Line.t -> Line.t
      val blocks : Line.t -> int
      val set_blocks : int -> Line.t -> Line.t
      val atime : Line.t -> float
      val set_atime : float -> Line.t -> Line.t
      val mtime : Line.t -> float
      val set_mtime : float -> Line.t -> Line.t
      val ctime : Line.t -> float
      val set_ctime : float -> Line.t -> Line.t
      val create :
        dev:int ->
        inode:int ->
        kind:Unix.file_kind ->
        nlink:int ->
        uid:int ->
        gid:int ->
        rdev:int ->
        size:int ->
        atime:float -> mtime:float -> ctime:float -> Line.t -> Line.t
    end
  module Ps :
    sig
      val user : Line.t -> string
      val set_user : string -> Line.t -> Line.t
      val pid : Line.t -> int
      val set_pid : int -> Line.t -> Line.t
      val pcpu : Line.t -> float
      val set_pcpu : float -> Line.t -> Line.t
      val pmem : Line.t -> float
      val set_pmem : float -> Line.t -> Line.t
      val vsz : Line.t -> int
      val set_vsz : int -> Line.t -> Line.t
      val rss : Line.t -> int
      val set_rss : int -> Line.t -> Line.t
      val tt : Line.t -> string
      val set_tt : string -> Line.t -> Line.t
      val stat : Line.t -> string
      val set_stat : string -> Line.t -> Line.t
      val started : Line.t -> string
      val set_started : string -> Line.t -> Line.t
      val time : Line.t -> string
      val set_time : string -> Line.t -> Line.t
      val command : Line.t -> string
      val set_command : string -> Line.t -> Line.t
      val create :
        user:string ->
        pid:int ->
        pcpu:float ->
        pmem:float ->
        vsz:int ->
        rss:int ->
        tt:string ->
        stat:string ->
        started:string -> time:string -> command:string -> Line.t -> Line.t
    end
  module Fstab :
    sig
      val file_system : Line.t -> string
      val set_file_system : string -> Line.t -> Line.t
      val mount_point : Line.t -> string
      val set_mount_point : string -> Line.t -> Line.t
      val fstype : Line.t -> string
      val set_fstype : string -> Line.t -> Line.t
      val options : Line.t -> string list
      val set_options : string list -> Line.t -> Line.t
      val dump : Line.t -> int
      val set_dump : int -> Line.t -> Line.t
      val pass : Line.t -> int
      val set_pass : int -> Line.t -> Line.t
      val create :
        file_system:string ->
        mount_point:string ->
        fstype:string ->
        options:string list -> dump:int -> pass:int -> Line.t -> Line.t
    end
  module Mailcap :
    sig
      val content_type : Line.t -> string
      val set_content_type : string -> Line.t -> Line.t
      val command : Line.t -> string
      val set_command : string -> Line.t -> Line.t
      val flags : Line.t -> string list
      val set_flags : string list -> Line.t -> Line.t
      val fields : Line.t -> (string * string) list
      val set_fields : (string * string) list -> Line.t -> Line.t
      val create :
        content_type:string ->
        command:string ->
        flags:string list ->
        fields:(string * string) list -> Line.t -> Line.t
    end
end