sig
  type ustring = string
  type uchar = char
  module OperatorLift : sig val ( !! ) : string -> ustring end
  type t = ustring list
  val is_relative : t -> bool
  val is_absolute : t -> bool
  val root : t
  val append : t -> ustring -> t
  val concat : t -> t -> t
  module Operators :
    sig val ( /: ) : t -> ustring -> t val ( //@ ) : t -> t -> t end
  module Infix :
    sig val ( /: ) : t -> ustring -> t val ( //@ ) : t -> t -> t end
  exception Malformed_path
  val normalize_filepath : t -> t
  val normalize_in_graph : t -> t
  val normalize_in_tree : t -> t
  val normalize : t -> t
  val parent : t -> t
  val belongs : t -> t -> bool
  val relative_to_any : t -> t -> t
  exception Not_parent
  val relative_to_parent : t -> t -> t
  exception Illegal_char
  type validator = ustring -> bool
  val default_validator : validator ref
  val to_ustring : t -> ustring
  val to_string : t -> string
  val of_string : ustring -> t
  val s : t -> string
  val p : ustring -> t
  val name : t -> ustring
  val map_name : (ustring -> ustring) -> t -> t
  val ext : t -> ustring option
  val map_ext : (ustring option -> ustring option) -> t -> t
  val name_core : t -> ustring
  type components = t * ustring * ustring option
  val split : t -> components
  val join : components -> t
  val map : (components -> components) -> t -> t
  val drive_letter : t -> uchar option
end