Browse thread
Comparing two things of any two types, in pure OCaml
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2006-09-16 (20:58) |
From: | Jacques Garrigue <garrigue@m...> |
Subject: | Re: [Caml-list] Improper generic equality in Caml (Rossberg's SML vs Caml) |
From: Diego Olivier Fernandez Pons <Diego.FERNANDEZ_PONS@etu.upmc.fr> > What does Andreas Rossberg in his SML vs. Caml page > > http://www.ps.uni-sb.de/~rossberg/SMLvsOcaml.html > > mean when he says that > > [Caml] Does not have a proper generic equality > on one hand (1, r) != (1, r), on the other (1, r) = (1, ref 1) The word "proper" is a bit strange (SML-centric), but the meaning is indeed that in ocaml you need two kinds of equalities, while in SML you can do with one. You have a taste of the SML way with objects: # class c = object val mutable x = 0 method set x' = x <- x' method get = x end;; class c : object val mutable x : int method get : int method set : int -> unit end # new c = new c;; - : bool = false Namely, in SML only immutable values are compared structurally, mutable ones being compared by pointer. The main advantage is that there is no need for physical equality, knowing that physical equality sometimes allows to distinguish between things that should be identical. This is completed by the use of so-called equality types, so that you cannot use equality on abstract types, where it may break abstraction. I personally like the idea of automatically using pointer equality on mutables. However pointer equality sometimes comes as a handy optimization for immutable values too, so going a long way to exclude it from the language may seem a bit harsh. By the way, I don't think that his statement is connected with the incoherence between structural and physical equality on Nan, which is a rather recent phenomenon in ocaml. Jacques Garrigue