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