From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.4 required=5.0 tests=AWL,SPF_SOFTFAIL autolearn=disabled version=3.1.3 X-Original-To: caml-list@yquem.inria.fr Delivered-To: caml-list@yquem.inria.fr Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by yquem.inria.fr (Postfix) with ESMTP id 3A49CBC37 for ; Thu, 17 Sep 2009 08:21:42 +0200 (CEST) X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnUCAGhysUqEpqxrmWdsb2JhbACbIwEBAQEBCAsKBxPCZoQYBQ X-IronPort-AV: E=Sophos;i="4.44,402,1249250400"; d="dat'59?scan'59,208,59";a="34447040" Received: from sainfoin-out.extra.cea.fr ([132.166.172.107]) by mail3-smtp-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-SHA; 17 Sep 2009 08:21:41 +0200 Received: from pisaure.intra.cea.fr (pisaure.intra.cea.fr [132.166.88.21]) by sainfoin.extra.cea.fr (8.14.2/8.14.2/CEAnet-Internet-out-2.0) with ESMTP id n8H6Lf3Q013459 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=NOT) for ; Thu, 17 Sep 2009 08:21:41 +0200 Received: from muguet1.intra.cea.fr (muguet1.intra.cea.fr [132.166.192.6]) by pisaure.intra.cea.fr (8.14.2/8.14.2) with ESMTP id n8H6LfRm001576 for ; Thu, 17 Sep 2009 08:21:41 +0200 (envelope-from Pascal.CUOQ@cea.fr) Received: from mansart.intra.cea.fr (mansart.intra.cea.fr [132.166.88.54]) by muguet1.intra.cea.fr (8.13.8/8.13.8/CEAnet-Intranet-out-1.1) with ESMTP id n8H6LfhG031731 for ; Thu, 17 Sep 2009 08:21:41 +0200 Received: from LAXA.intra.cea.fr ([132.166.64.42]) by mansart.intra.cea.fr with Microsoft SMTPSVC(6.0.3790.3959); Thu, 17 Sep 2009 08:21:41 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01CA375F.1E7A8948" Subject: Re: Caml-list] Sets and home-made ordered types Date: Thu, 17 Sep 2009 08:21:40 +0200 Message-ID: <5EFD4D7AC6265F4D9D3A849CEA9219191AB20D@LAXA.intra.cea.fr> X-MS-Has-Attach: X-MS-TNEF-Correlator: <5EFD4D7AC6265F4D9D3A849CEA9219191AB20D@LAXA.intra.cea.fr> Thread-Topic: Caml-list] Sets and home-made ordered types Thread-Index: Aco3Q9JA06WZFOTTSP+cflZhKl8eQQAGWLJA References: <20090917030607.927BCBCA9@yquem.inria.fr> From: "CUOQ Pascal" To: X-OriginalArrivalTime: 17 Sep 2009 06:21:41.0193 (UTC) FILETIME=[1ED13B90:01CA375F] X-Spam: no; 0.00; home-made:01 cuoq:01 cuoq:01 model:01 orderedtype:01 struct:01 .......:98 wrote:01 wrote:01 caml-list:01 cea:01 data:02 objects:02 matthias:02 equivalence:03 X-Attachments: type="application/ms-tnef" name="winmail.dat" This is a multi-part message in MIME format. ------_=_NextPart_001_01CA375F.1E7A8948 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable David Allsopp wrote : > Is it not possible to model your requirement using Map.Make instead - = where > the keys represent the equivalence classes and the values whatever = data > you're associating with them?=20 Matthias Puech wrote: >Yes, that's exactly the workaround I ended up using, although I'm not >very happy with it because, among other things, these keys/class >disciminant get duplicated (once inside the key, once inside the >element). I'm getting more concrete below. Since you already have the "compare" function between objects of type t, why don't you make your map associate values of type t to identical values of type t instead of trying to have different type for keys and elements? You can even do it generically, and obtain with little effort an implementation of sets that supports find. module Set_With_Find(X:Set.OrderedType) =3D=20 struct module M =3D Map.Make(X) type t =3D X.t M.t (* with invariant that value v is always = associated to v *) let find =3D M.find let add v s =3D M.add v v s ....... end Pascal ------_=_NextPart_001_01CA375F.1E7A8948 Content-Type: application/ms-tnef; name="winmail.dat" Content-Transfer-Encoding: base64 eJ8+IikGAQaQCAAEAAAAAAABAAEAAQeQBgAIAAAA5AQAAAAAAADoAAEIgAcAGAAAAElQTS5NaWNy b3NvZnQgTWFpbC5Ob3RlADEIAQ2ABAACAAAAAgACAAEEgAEAMAAAAFJlOiBDYW1sLWxpc3RdIFNl dHMgYW5kIGhvbWUtbWFkZSBvcmRlcmVkIHR5cGVzAM0QAQWAAwAOAAAA2QcJABEACAAVACgABABD AQEggAMADgAAANkHCQARAAgAFQAoAAQAQwEBCYABACEAAAA5MkYwOTJBQUExREQxNTREQTYyRjhD QjRFNkQ2N0ZFNgBzBwEDkAYAgAsAADkAAAADACYAAAAAAAMANgAAAAAAQAA5AEiJeh5fN8oBHgA9 AAEAAAAFAAAAUmU6IAAAAAACAUcAAQAAAC0AAABjPUZSO2E9QVRMQVM7cD1DRUE7bD1MQVhBLTA5 MDkxNzA2MjE0MFotNDc4NwAAAAAeAEkAAQAAACMAAABDYW1sLWxpc3QgRGlnZXN0LCBWb2wgNTEs IElzc3VlIDMxAABAAE4AgHmxzEM3ygEeAFoAAQAAACEAAABjYW1sLWxpc3QtYm91bmNlc0B5cXVl bS5pbnJpYS5mcgAAAAACAVsAAQAAAF8AAAAAAAAAgSsfpL6jEBmdbgDdAQ9UAgAAAABjYW1sLWxp c3QtYm91bmNlc0B5cXVlbS5pbnJpYS5mcgBTTVRQAGNhbWwtbGlzdC1ib3VuY2VzQHlxdWVtLmlu cmlhLmZyAAACAVwAAQAAACYAAABTTVRQOkNBTUwtTElTVC1CT1VOQ0VTQFlRVUVNLklOUklBLkZS AAAAHgBdAAEAAAAhAAAAY2FtbC1saXN0LXJlcXVlc3RAeXF1ZW0uaW5yaWEuZnIAAAAAAgFeAAEA AABfAAAAAAAAAIErH6S+oxAZnW4A3QEPVAIAAAAAY2FtbC1saXN0LXJlcXVlc3RAeXF1ZW0uaW5y aWEuZnIAU01UUABjYW1sLWxpc3QtcmVxdWVzdEB5cXVlbS5pbnJpYS5mcgAAAgFfAAEAAAAmAAAA U01UUDpDQU1MLUxJU1QtUkVRVUVTVEBZUVVFTS5JTlJJQS5GUgAAAB4AZgABAAAABQAAAFNNVFAA AAAAHgBnAAEAAAAhAAAAY2FtbC1saXN0LWJvdW5jZXNAeXF1ZW0uaW5yaWEuZnIAAAAAHgBoAAEA AAAFAAAAU01UUAAAAAAeAGkAAQAAACEAAABjYW1sLWxpc3QtcmVxdWVzdEB5cXVlbS5pbnJpYS5m cgAAAAAeAHAAAQAAACwAAABDYW1sLWxpc3RdIFNldHMgYW5kIGhvbWUtbWFkZSBvcmRlcmVkIHR5 cGVzAAIBcQABAAAAGwAAAAHKN0PSQNOlmRTk00j/nH5WYSpfHkEABliyQAAeAHQAAQAAABkAAABj YW1sLWxpc3RAeXF1ZW0uaW5yaWEuZnIAAAAAHgAaDAEAAAAMAAAAQ1VPUSBQYXNjYWwAHgAdDgEA AAAsAAAAQ2FtbC1saXN0XSBTZXRzIGFuZCBob21lLW1hZGUgb3JkZXJlZCB0eXBlcwACAQkQAQAA AMMDAAC/AwAAyAUAAExaRnWgOiCMAwAKAHJjcGcxMjXiMgNDdGV4BUEBAwH3/wqAAqQD5AcTAoAP 8wBQBFY/CFUHshElDlEDAQIAY2jhCsBzZXQyBgAGwxEl9jMERhO3MBIsETMI7wn3tjsYHw4wNREi DGBjAFDzCwkBZDM2FlALpgrjCoAgRGF2aWQQwGxswHNvcHAgdwNgDrBEIDoc9D4gSQQgaUUFQG4e UCBwbwQQaWMCYB5wdG8gBGIDIHnFCGEgGCBxdWkYIAeASQIwIHUAkG5nBdBhtHAuIlBrHnALgHMO sKphHZAtHiBoBJBlHqZqdCOQICKweQQgGCBw3xggFBAhwSRSIUJ2B0AJ8PpjHnBjC2AEEAeRAHAd kF8kUiYBClAEICOAYQ6wdrUSgWQoEGEepiDhJxgg0ybwBBBvYwcwdCISA/DzJFAkQm0/HOUc9CJQ AkD2aAcwBCBQClAT0B4kHpbaWQeQLCRBKBAnBCAOwFEA0HRseSRDdwWwa/cKwAhgJxFJJbAnEAmA IeC/HhAh8y3QB0AkUAhgZyqg+EknbR9yHqUoQS7AE+CvHgAuwCpzH1FiBZBhIfD+ZTDRBGAiIR5Q I5EkQSIRty3DJSEkgy8mgx6lZAQA3SnwbQuAAHAFQGcUIChw3TBQbA3gKBEdkCgCICZR/yLhHYAg MSRkLdA4nR6lILD5IZMpLjFzN5EqIwRgKYE/BaAmQBggHmEzkBewdy79KypTC4AmUSDhMOEYICMw VzKSKEAkQyIFoG0KsWXYIiBmL5AukGkCIDOBTHR3CeE0cGJqBZB0iQQgb2Yc9HR5cCAx1y3QI4Au wGQCICcFQD8C/wDAIrEg4wDAHhAptidnQoD/IEBDEyBBHPQ5EQIwOBEDIP9F7yLmRlIygCISIFE/ wzbQ/wEgI6ElUkMRHPQCEAXAJJPTJwI7RXM/KypZPxEzsL8DoCgxA6BDwB9CN5BuBnH/R9EusDDR JxFCAAGQC4AqZP84AAJAICEBERfBJvFHFUCA/ztUKhFBUUZRFBEEIC3yU5CvMFAfwAAgBCBmC4Bk PduNBGF1ICEGYHRfVyqBRF9GVOEoWDpWUS4mTwsgI6FkVEMRKSC2PRzlIwByGtAx5SBZo91V5U1Y USJWVyApWUpGhSlYYFguBUBNXMEoKv0zBW4mAAchJVNUESeDJ3DjH0Am4Wx3YUxiRVYnIfsgYF8A KltbICAFQFTSWoL+LlTSYO4jMB2QXwAEIGIy92O0Y/FZSi5lxBz0L/ErKl5QJqBH0SsqKyp9aXAA HgA1EAEAAAA7AAAAPDVFRkQ0RDdBQzYyNjVGNEQ5RDNBODQ5Q0VBOTIxOTE5MUFCMjBEQExBWEEu aW50cmEuY2VhLmZyPgAAHgA5EAEAAAAqAAAAPDIwMDkwOTE3MDMwNjA3LjkyN0JDQkNBOUB5cXVl bS5pbnJpYS5mcj4AAAAeAEcQAQAAAA8AAABtZXNzYWdlL3JmYzgyMgAACwDyEAEAAAAfAPMQAQAA AGwAAABSAGUAJQAzAEEAIABDAGEAbQBsAC0AbABpAHMAdABdACAAUwBlAHQAcwAgAGEAbgBkACAA aABvAG0AZQAtAG0AYQBkAGUAIABvAHIAZABlAHIAZQBkACAAdAB5AHAAZQBzAC4ARQBNAEwAAAAL APYQAAAAAEAABzBhqQk1XTfKAUAACDDxdIYeXzfKAQMA3j+vbwAAAwDxPwkEAAAeAPg/AQAAAAwA AABDVU9RIFBhc2NhbAACAfk/AQAAAHAAAAAAAAAA3KdAyMBCEBq0uQgAKy/hggEAAAAAAAAAL089 Q0VBL09VPURJL0NOPURPTUFJTkVTL0NOPURSVC1TQUMvQ049VVRJTElTQVRFVVJTL0NOPVBSRS1F MkszL0NOPUxPVDEvQ049UEMyMDYwNTYAHgD6PwEAAAAVAAAAU3lzdGVtIEFkbWluaXN0cmF0b3IA AAAAAgH7PwEAAAAeAAAAAAAAANynQMjAQhAatLkIACsv4YIBAAAAAAAAAC4AAAADAP0/5AQAAAMA GUAAAAAAAwAaQAAAAAADAB1AAAAAAAMAHkAAAAAAHgAwQAEAAAAJAAAAUEMyMDYwNTYAAAAAHgAx QAEAAAAJAAAAUEMyMDYwNTYAAAAAHgAyQAEAAAAhAAAAY2FtbC1saXN0LWJvdW5jZXNAeXF1ZW0u aW5yaWEuZnIAAAAAHgAzQAEAAAAhAAAAY2FtbC1saXN0LXJlcXVlc3RAeXF1ZW0uaW5yaWEuZnIA AAAAHgA4QAEAAAAJAAAAUEMyMDYwNTYAAAAAHgA5QAEAAAACAAAALgAAAAMAdkD/////CwApAAAA AAALACMAAAAAAAMABhDrWcmJAwAHECsDAAADABAQAAAAAAMAERAAAAAAHgAIEAEAAABlAAAAREFW SURBTExTT1BQV1JPVEU6SVNJVE5PVFBPU1NJQkxFVE9NT0RFTFlPVVJSRVFVSVJFTUVOVFVTSU5H TUFQTUFLRUlOU1RFQUQtV0hFUkVUSEVLRVlTUkVQUkVTRU5UVEhFRQAAAAACAX8AAQAAADsAAAA8 NUVGRDREN0FDNjI2NUY0RDlEM0E4NDlDRUE5MjE5MTkxQUIyMERATEFYQS5pbnRyYS5jZWEuZnI+ AAAj7w== ------_=_NextPart_001_01CA375F.1E7A8948--