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