Mailing list for all users of the OCaml language and system.
 help / color / mirror / Atom feed
From: Basile STARYNKEVITCH <Basile.Starynkevitch@cea.fr>
To: caml-list@inria.fr
Subject: Q: hashtables of parametrized types in Ocaml?
Date: Fri, 4 Apr 1997 13:44:43 +0200	[thread overview]
Message-ID: <199704041144.NAA11665@soleil.serma.cea.fr> (raw)


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-04 17:04 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
1997-04-04 11:44 Basile STARYNKEVITCH [this message]
1997-04-04 19:03 ` Mark Hayden
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=199704041144.NAA11665@soleil.serma.cea.fr \
    --to=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