let add_in_list lst num info merge =
let new_e = (num, info) in
let rec add_to_l l =
match l with [] -> [new_e]
| (ne, old_e) as e :: tl ->
if ne = num then
let e = merge old_e info in (num, e)::tl
else if ne < num then e :: (add_to_l tl) else new_e :: l
in add_to_l lst