let rec lists_merge (equal: '-> '-> 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