let update_arities (arities: arities) (symbol : symbol) : arities =
let symbol_arity =
Symbol.arity symbol
in
let rec get_arities' acc =
match acc with
| [] ->
[ (symbol_arity, [symbol]) ]
| ((arity, symbols) as head) :: tail ->
(* add to other symbols of same arity *)
if arity == symbol_arity then
(arity, (symbol :: symbols)) :: tail
(* ordered - so first symbol of this arity *)
else if arity > symbol_arity then
(symbol_arity, (symbol :: [])) :: acc
(* continue search *)
else
head :: get_arities' tail
in
get_arities' arities