let add (t : ('a,'b,'c,'d) t) x y =
  let bin = t.proj x in
  let accu = Hashtbl.find t.table bin |? t.zero in
  Hashtbl.replace t.table bin (t.add y accu)