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