caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
From: Mark Hayden <hayden@cs.cornell.edu>
To: Basile STARYNKEVITCH <Basile.Starynkevitch@cea.fr>
Cc: caml-list@inria.fr
Subject: Re: Q: hashtables of parametrized types in Ocaml?
Date: Fri, 04 Apr 1997 14:03:26 -0500	[thread overview]
Message-ID: <199704041903.OAA17096@gulag.cs.cornell.edu> (raw)
In-Reply-To: Your message of "Fri, 04 Apr 1997 13:44:43 +0200." <199704041144.NAA11665@soleil.serma.cea.fr>

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 2871 bytes --]


Here is a similar example that works for me.
This is for hash tables that use MD5 digest 
strings for keys.

--Mark


.mli:

  module MD5_handler : ( Handler.S with type key = Digest.t )

.ml:

  module MD5_key =
    struct
      type t = Digest.t
      let equal = (=)
      let hash s = abs (Hsys.pop_int s 0)
    end

  module MD5_hashtbl = Hashtbl.Make ( MD5_key )

pop_int is a function thats reads an integer in a string:

  val pop_int : string -> int -> int


>
>Hello
>
>[[English]]
>
>Suppose I have
>
>    (* a symbol has a name and a value; value type is unspecified
>       here; in practice it will be defined in another module! *)
>    type 'a asymbol_t = { sy_name: string; sy_val: 'a }
>
>    (* the hash of a symbol is the hash of its name *)
>    let symhash { sy_name= name } = Hash.hash name;
>
>Now I would like to define hashtable of symbol thru the Hashtbl.Make
>functor.
>
>I tried 
>
>    module SymbolHashtbl =
>      Hashtbl.Make(struct
>	type t = 'a asymbol_t
>	let equal = (==)
>	let hash = symhash
>      end)
>
>but it doesn't work! How can I achieve an equivalent result? Of course
>I would like the resulting symbol hashtable module to have a key type
>parametrized by 'a (symbols' value type) and a table type parametrized
>by 'a (the same symbols' value type) and by 'b (the arbitrary hash
>value type - noted 'a on section 16.10 page 186 of refman1.05)
>
>The reason of all this is that I have in my application (some kind of
>translator, building and working on program abstract syntax trees)
>symbols and tree nodes - each node has a symbol and may have
>subnodes. A symbol may have as value a tree node.  So I have a module
>Symbol (defining type 'a asymbol_t) and another module Abstree (for
>abstract syntax trees) defining type node_t and symbol_t = node_t
>asymbol_t.
>
>Perhaps a double functor is the answer, but I can't figure it out!
>
>[[French summary]]
>
>Comment créer une table de hash (via Hashtbl) de types parametrés. Mon
>type asymbol_t (defini ci-dessus) est parametré par le type 'a des
>valeurs de symbole (instantié dans un autre module). Mais le hashage
>ne porte que sur le nom du symbole. Comment faire une table de hash
>sur ces symboles.  
>
>
>N.B. Any opinions expressed here are solely mine, and not of my organization.
>N.B. Les opinions exprimees ici me sont personnelles et n engagent pas le CEA.
>
>
>----------------------------------------------------------------------
>Basile STARYNKEVITCH   ----  Commissariat à l Energie Atomique 
>DRN/DMT/SERMA * CEA/Saclay bat.470 * 91191 GIF/YVETTE CEDEX * France
>fax: (33) 01,69.08.85.68; phone: 01,69.08.40.66; home: 01,46.65.45.53
>email: Basile . Starynkevitch @ cea . fr  (but remove white space)
>I speak french, english, russian. Je parle français, anglais, russe.
>----------------------------------------------------------------------
>
>
>




  reply	other threads:[~1997-04-10  8:52 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-04-04 11:44 Basile STARYNKEVITCH
1997-04-04 19:03 ` Mark Hayden [this message]
1997-04-11  8:05   ` Christian Boos

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=199704041903.OAA17096@gulag.cs.cornell.edu \
    --to=hayden@cs.cornell.edu \
    --cc=Basile.Starynkevitch@cea.fr \
    --cc=caml-list@inria.fr \
    /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).