Because of the particular way the numerical identity predicates are implemented in all of these languages, it doesn't quite match our conceptual expectations. For instance, For instance, if `ycell` is a reference cell, then `ref !ycell` will always be a numerically distinct reference cell containing the same value. We get this pattern of comparisons in OCaml:
ycell == ycell
- ycell != ref !ycell (* these aren't numerically identical *)
+ ycell != ref !ycell (* true, these aren't numerically identical *)
ycell = ycell
- ycell = ref !ycell (* they are qualitatively indiscernible *)
+ ycell = ref !ycell (* true, they are qualitatively indiscernible *)
But now what about?