struct     include Filename     let string_rexists s ~f ~from:n =       let rec loop n =         if n = 0 then           None         else if f s.[n - 1] then           Some n         else           loop (n - 1)       in       loop n     let skip_end_slashes s ~from =       match string_rexists s ~from ~f:(fun c -> c <> '/'with       | Some v -> `Ends_at v       | None   -> `All_slashes     let split = function     | "" -> ".""."     | s ->       match skip_end_slashes s ~from:(String.length s) with       | `All_slashes -> "/""/"       | `Ends_at basename_end ->         match string_rexists s ~f:(fun c -> c = '/') ~from:basename_end with         | None -> "."String.sub ~pos:0 ~len:basename_end s         | Some basename_start ->           let basename =             String.sub s ~pos:basename_start               ~len:(basename_end - basename_start)           in           let dirname =             match skip_end_slashes s ~from:basename_start with             | `All_slashes -> "/"             | `Ends_at dirname_end -> String.sub ~pos:0 ~len:dirname_end s           in           dirname, basename     let parts filename =       let rec loop acc filename =         match split filename with         | "." as base, "." -> base :: acc         | "/" as base, "/" -> base :: acc         | rest, dir ->           loop (dir :: acc) rest       in       loop [] filename   end