aboutsummaryrefslogtreecommitdiffstats
path: root/lib/concepts/Path.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/concepts/Path.ml')
-rw-r--r--lib/concepts/Path.ml16
1 files changed, 16 insertions, 0 deletions
diff --git a/lib/concepts/Path.ml b/lib/concepts/Path.ml
new file mode 100644
index 0000000..c751301
--- /dev/null
+++ b/lib/concepts/Path.ml
@@ -0,0 +1,16 @@
+type t = string BatFingerTree.t
+
+let empty : t = BatFingerTree.empty
+let of_list (components : string list) : t = BatFingerTree.of_list components
+let to_list (path : t) : string list = BatFingerTree.to_list path
+let snoc (path : t) (component : string) : t = BatFingerTree.snoc path component
+let to_string (path : t) : string = String.concat "/" (to_list path)
+
+let is_prefix ~(prefix : t) (path : t) : bool =
+ let rec walk prefix path =
+ match prefix, path with
+ | [], _ -> true
+ | p :: prefix, x :: path -> p = x && walk prefix path
+ | _ :: _, [] -> false
+ in
+ walk (to_list prefix) (to_list path)