let rec lists_merge (equal: 'a -> 'a -> bool) (list1: 'a list) (list2: 'a list) : 'a list =
match list2 with
| [] ->
list1
| head :: tail ->
if List.exists
(fun element ->
equal head element
)
list1
then
lists_merge equal list1 tail
else
lists_merge equal (head :: list1) tail