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: [EMAIL PROTECTED]
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
---------------------------------------------

Attachment: signature.asc
Description: OpenPGP digital signature

_______________________________________________
Caml-list mailing list. Subscription management:
http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
Archives: http://caml.inria.fr
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs

Reply via email to