Hashtblにはまった

OCamlのHashtblは,(=)演算子による構造比較なのに気がつかなくて,はまってしまった.

# let key = ref 0;;
val key = int ref {contents = 0}
# Hashtbl.add tbl key ();;
- : unit = ()
# Hashtbl.mem tbl key;;
- : bool = true
# key := 1;;         // <-- keyの中身を更新
- : unit = ()
# Hashtbl.mem tbl key;;
- : bool = false     // <-- 値が取れなくなる

ここで,keyの値を0に戻すと,再び値が取れるようになる...

(==)で比較してほしかったなあとも思うが,そうするとstring型をキーとしてうまく使えなくなってしまうのか.
悩ましいところではある.