Jon Harrop a écrit : > On Thursday 29 May 2008 05:50:33 Peng Zang wrote: >> Hello list, >> >> Recently, in building some toy games, I've started using objects. I've >> been pleased with them and often find the subtyping convenient. >> >> However, I've run into some issues with the standard physical equality of >> objects that the (=) operator performs. Namely, it makes several stdlib >> modules difficult to use. Modules that provides a polymorphic (generic) >> interface such as Hashtbl, List, Stack, etc.. rely on the (=) operator. >> This is fine as long as it happens to be what I need. The minute I >> introduce my own equality however, things break down. >> >> What is the best way to go about using the stdlib (or similar) when you >> have your own equality function? This problem almost never shows up if you >> just stick with basic data types, but with objects you quickly run into it. > > Hi Peng, > > You can use the Hashtbl.Make functor to create hash tables using your own > equality (and hashing) function. Other than that, you're screwed: resort to > cut and paste from the stdlib. > Via Custom block (section 18.9.1 of the manual), you could create a functor with the following shape (I did not check my syntax): module type Quotient = type t type qt val class : t -> qt val get_representent : qt -> t end module type Equivalence = type t val compare : t -> t -> int end module Make_Quotient (R : Equivalence) : Quotient with type t = R.t Such that (class x) builds a custom block with the given compare as comparison function ... You can add hash and serialization to the Equivalence type too ... It is a pity we have to do that from C, this should be the default way to bridge the gap between polymorphic comparison and specific comparison. (and PML will provide a buildin class constructor in the near future). Hope this helps, Christophe -- Christophe Raffalli Universite de Savoie Batiment Le Chablais, bureau 21 73376 Le Bourget-du-Lac Cedex tel: (33) 4 79 75 81 03 fax: (33) 4 79 75 87 42 mail: Christophe.Raffalli@univ-savoie.fr www: http://www.lama.univ-savoie.fr/~RAFFALLI --------------------------------------------- IMPORTANT: this mail is signed using PGP/MIME At least Enigmail/Mozilla, mutt or evolution can check this signature. The public key is stored on www.keyserver.net ---------------------------------------------