let list_diff ?(pred=(=)) l1 l2 = List.fold_right (fun el acc -> if not (List.exists (pred el) l2) then el :: acc else acc ) l1 []