Source

amall / src / filepath.mli

Full commit
(* вид пути: *)
type abs = [= `Abs ]
 and rel = [= `Rel ]
 and unk = [= `Abs | `Rel ]
;

(* путь в виде значения приватного типа: *)
type t +'kind = private ('kind * list string)
;

(* создать путь из списка сегментов: *)
value of_segs : list string -> t unk;

(* создать путь из строки: *)
value of_string : string -> t unk;

(* классифицировать путь: *)
value classify : t [= abs | rel | unk] -> [= `Abs of t abs | `Rel of t rel];

(* выдать строку из пути: *)
value to_string : t 'a -> string;

(* выдать список сегментов пути (для абсолютных путей первый всегда ""): *)
value to_segs : t 'a -> list string;

(* [abs ~base path] резолвит [path] относительно абсолютного пути [base],
   если [path] является относительным путём: *)
value abs : ~base:(t abs) -> t [= abs | rel | unk] -> t abs;

(* обрезать из абсолютного пути всё, что пытается выйти выше корня: *)
value not_above_root : t abs -> t abs;

(* результат выполнения функции [root ~base path] аналогичен получению
   полного пути в случае, если сделали [chroot base] и внутри
   обращаются к пути [path] *)
value root : ~base:(t abs) -> t abs -> t abs;

(* [rel_from ~base p] равно относительному пути, по которому
   доступен путь [p], если перейти в директорию [base] *)
value rel_from : ~base:(t abs) -> t abs -> t rel;