aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/util.ml7
-rw-r--r--lib/util.mli2
2 files changed, 8 insertions, 1 deletions
diff --git a/lib/util.ml b/lib/util.ml
index ed56f06d76..77d26ecf4d 100644
--- a/lib/util.ml
+++ b/lib/util.ml
@@ -62,6 +62,13 @@ let stringmap_dom m = Stringmap.fold (fun s _ l -> s::l) m []
let list_intersect l1 l2 =
List.filter (fun x -> List.mem x l2) l1
+let list_union l1 l2 =
+ let rec urec = function
+ | [] -> l2
+ | a::l -> if List.mem a l2 then urec l else a::urec l
+ in
+ urec l1
+
let list_unionq l1 l2 =
let rec urec = function
| [] -> l2
diff --git a/lib/util.mli b/lib/util.mli
index e0462b36c9..30d7bdee79 100644
--- a/lib/util.mli
+++ b/lib/util.mli
@@ -36,6 +36,7 @@ val stringmap_dom : 'a Stringmap.t -> string list
(*s Lists. *)
val list_intersect : 'a list -> 'a list -> 'a list
+val list_union : 'a list -> 'a list -> 'a list
val list_unionq : 'a list -> 'a list -> 'a list
val list_subtract : 'a list -> 'a list -> 'a list
val list_subtractq : 'a list -> 'a list -> 'a list
@@ -49,7 +50,6 @@ val list_fold_left_i : (int -> 'a -> 'b -> 'a) -> int -> 'a -> 'b list -> 'a
val list_for_all_i : (int -> 'a -> bool) -> int -> 'a list -> bool
val list_except : 'a -> 'a list -> 'a list
val list_for_all2eq : ('a -> 'b -> bool) -> 'a list -> 'b list -> bool
-val list_map_i : (int -> 'a -> 'b) -> int -> 'a list -> 'b list
val list_sep_last : 'a list -> 'a * 'a list
val list_try_find_i : (int -> 'a -> 'b) -> int -> 'a list -> 'b
val list_uniquize : 'a list -> 'a list