caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Alain Frisch <alain.frisch@lexifi.com>
To: "Soegtrop, Michael" <michael.soegtrop@intel.com>,
	"caml-list@inria.fr" <caml-list@inria.fr>
Subject: Re: [Caml-list] Specify the default hash function for a type
Date: Fri, 13 May 2016 11:06:07 +0200	[thread overview]
Message-ID: <850765ff-25f1-ecb9-9707-74d3dc47675c@lexifi.com> (raw)
In-Reply-To: <0F7D3B1B3C4B894D824F5B822E3E5A172CEF1630@IRSMSX102.ger.corp.intel.com>

Dear Michael,

Don't tell anybody (ahem), but the following might work depending on 
your exact use case...

If you define a type such as:

  type t = {
    foo: ....;
    id: int;
  }

and if you set the tag of values for this type to Obj.record_tag (= 248) 
with Obj.set_tag, then polymorphic hash *and* comparison functions will 
use the "id" field and ignore the "foo" field (and any other extra 
fields).  It is important to keep "id" as the second field to mimic the 
layout of real object values (and exception slots).

In particular, this lets you easily "forget" sub-parts of a value (by 
setting "id" to a fixed constant), or implement "references compared 
with physical equality" (use a counter to assign unique "id" to each 
such reference).


Best regards,

Alain



On 13/05/2016 09:52, Soegtrop, Michael wrote:
> Dear Ocaml Users,
>
>
>
> I wonder if there is a way to specify a default hash function for a
> type, which is then used by the automated hash functions e.g. created
> for records containing this type. I have e.g. a record with about 10
> fields and I am happy with the default hash functions for most fields
> and for the record, but for just one field I would like to use a custom
> hash function, but I don’t want to write a hash function for the record.
>
>
>
> I am currently using the standard library, but if there is a solution
> with Batteries or Core, I would also be interested.
>
>
>
> Best regards,
>
>
>
> Michael
>
> Intel Deutschland GmbH
> Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
> Tel: +49 89 99 8853-0, www.intel.de
> Managing Directors: Christin Eisenschmid, Christian Lamprechter
> Chairperson of the Supervisory Board: Nicole Lau
> Registered Office: Munich
> Commercial Register: Amtsgericht Muenchen HRB 186928
>

  parent reply	other threads:[~2016-05-13  9:06 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-05-13  7:52 Soegtrop, Michael
2016-05-13  8:13 ` Ben Millwood
2016-05-13  8:40   ` Soegtrop, Michael
2016-05-13  9:06 ` Alain Frisch [this message]
2016-05-13  9:26   ` Soegtrop, Michael
2016-05-13 12:01     ` Gabriel Scherer
2016-05-13 12:23       ` Alain Frisch
2016-05-13 12:32       ` Soegtrop, Michael
2016-05-13 13:50   ` Pierre Chambart
2016-05-13 13:56     ` Alain Frisch
2016-05-13 16:17       ` Soegtrop, Michael
2016-05-13 18:57         ` Thomas Braibant
2016-05-13 22:45           ` Soegtrop, Michael
2016-05-14  8:41             ` Thomas Braibant
2016-05-14  9:06               ` Soegtrop, Michael
2016-05-17 13:03                 ` Soegtrop, Michael

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=850765ff-25f1-ecb9-9707-74d3dc47675c@lexifi.com \
    --to=alain.frisch@lexifi.com \
    --cc=caml-list@inria.fr \
    --cc=michael.soegtrop@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).