Q: hashtables of parametrized types in Ocaml?

From: Basile STARYNKEVITCH (Basile.Starynkevitch@cea.fr)
Date: Fri Apr 04 1997 - 13:44:43 MET DST


Date: Fri, 4 Apr 1997 13:44:43 +0200
Message-Id: <199704041144.NAA11665@soleil.serma.cea.fr>
From: Basile STARYNKEVITCH <Basile.Starynkevitch@cea.fr>
To: caml-list@inria.fr
Subject: Q: hashtables of parametrized types in Ocaml?

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.
----------------------------------------------------------------------



This archive was generated by hypermail 2b29 : Sun Jan 02 2000 - 11:58:10 MET