sig
  type existence = Must_exist | Must_not_exist | Indifferent
  exception No_file
  exception File_exists
  val normalize :
    ?existence:Filepath.existence -> ?base_name:string -> string -> string
  val relativize : ?base_name:string -> string -> string
  module Normalized :
    sig
      type t = private string
      val of_string :
        ?existence:Filepath.existence ->
        ?base_name:string -> string -> Filepath.Normalized.t
      val concat :
        ?existence:Filepath.existence ->
        Filepath.Normalized.t -> string -> Filepath.Normalized.t
      val to_pretty_string : Filepath.Normalized.t -> string
      val to_string_list : Filepath.Normalized.t list -> string list
      val equal : Filepath.Normalized.t -> Filepath.Normalized.t -> bool
      val compare : Filepath.Normalized.t -> Filepath.Normalized.t -> int
      val compare_pretty :
        ?case_sensitive:bool ->
        Filepath.Normalized.t -> Filepath.Normalized.t -> int
      val pretty : Stdlib.Format.formatter -> Filepath.Normalized.t -> unit
      val pp_abs : Stdlib.Format.formatter -> Filepath.Normalized.t -> unit
      val unknown : Filepath.Normalized.t
      val is_unknown : Filepath.Normalized.t -> bool
      val empty : Filepath.Normalized.t
      val is_empty : Filepath.Normalized.t -> bool
      val is_special_stdout : Filepath.Normalized.t -> bool
      val is_file : Filepath.Normalized.t -> bool
      val to_base_uri : Filepath.Normalized.t -> string option * string
    end
  val is_relative :
    ?base_name:Filepath.Normalized.t -> Filepath.Normalized.t -> bool
  val add_symbolic_dir : string -> Filepath.Normalized.t -> unit
  val reset_symbolic_dirs : unit -> unit
  val all_symbolic_dirs : unit -> (string * Filepath.Normalized.t) list
  type position = {
    pos_path : Filepath.Normalized.t;
    pos_lnum : int;
    pos_bol : int;
    pos_cnum : int;
  }
  val pp_pos : Stdlib.Format.formatter -> Filepath.position -> unit
  val pwd : unit -> string
end