let rec lists_equal (equal: 'a -> 'b -> bool) (list1: 'a list) (list2: 'b list) : bool =
match list1, list2 with
| [], [] ->
true
| head1 :: tail1, head2 :: tail2 when
equal head1 head2 ->
lists_equal equal tail1 tail2
| _ ->
false