functor (S : StringType->
  sig
    type ustring = S.t
    type uchar = S.tchar
    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