let mapping_extend (_mapping: ('a * 'b) list) (_key_equal: 'a -> 'a -> bool) (_value_equal: 'b -> 'b -> bool)
(_key: 'a) (_value: 'b): ('a * 'b) list =
let rec do_mapping_extend (mapping: ('a * 'b) list) =
match mapping with
| [] ->
(_key, _value) :: _mapping
| (key, value) :: tail ->
if
(_key_equal _key key)
&&
(_value_equal _value value)
then
(* mapping already contains the old entry *)
_mapping
else if
(_key_equal _key key)
||
(_value_equal _value value)
then
raise Exit
else
do_mapping_extend tail
in
do_mapping_extend _mapping