+let string_of_pointer p =
+ let map = function
+ | ET.One i -> string_of_int i
+ | ET.Many is -> String.concat "," (List.map string_of_int is)
+ in
+ String.concat "." (List.map map p)
+
+let pointer_of_string s =
+ let map s =
+ match list_map_filter int_of_string_opt [] (String.split_on_char ',' s) with
+ | [] -> None
+ | [i] -> Some (ET.One i)
+ | is -> Some (ET.Many is)
+ in
+ list_map_filter map [] (String.split_on_char '.' s)