caml-list - the Caml user's mailing list
 help / color / mirror / Atom feed
* [Caml-list] how to open types
@ 2002-11-04  8:25 pan deng
  2002-11-04 12:41 ` Olivier Andrieu
  0 siblings, 1 reply; 2+ messages in thread
From: pan deng @ 2002-11-04  8:25 UTC (permalink / raw)
  To: caml-list

I want to use hashtable on my objects which all has a
method get_string:string.
but i can only write the code like these:

module SeqHashType =
struct 
  type  t= <get_string:string >
  let equal s1  s2 = (String.uppercase s1#get_string
=String.uppercase  s2#get_string )
  let hash s = Strex.hash s#get_string  
end
module SeqHashtbl = Hashtbl.Make (SeqHashType)

surely it is not what i want . i have tried 
type t= <get_string:string ; ..>

but i can not complie it , the complier says Unbound
..
then how to open the type <get_string:string> in the
module SeqHashType ?
or it can not be opened at this situation ?

i am a newbie and a little puzzled at open types. 

__________________________________________________
Do you Yahoo!?
HotJobs - Search new jobs daily now
http://hotjobs.yahoo.com/
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [Caml-list] how to open types
  2002-11-04  8:25 [Caml-list] how to open types pan deng
@ 2002-11-04 12:41 ` Olivier Andrieu
  0 siblings, 0 replies; 2+ messages in thread
From: Olivier Andrieu @ 2002-11-04 12:41 UTC (permalink / raw)
  To: pan deng; +Cc: caml-list

 pan deng [Monday 4 November 2002] :
 >
 > I want to use hashtable on my objects which all has a
 > method get_string:string.
 > but i can only write the code like these:
 > 
 > module SeqHashType =
 > struct 
 >   type  t= <get_string:string >
 >   let equal s1  s2 = (String.uppercase s1#get_string
 > =String.uppercase  s2#get_string )
 >   let hash s = Strex.hash s#get_string  
 > end
 > module SeqHashtbl = Hashtbl.Make (SeqHashType)
 > 
 > surely it is not what i want . i have tried 
 > type t= <get_string:string ; ..>
 > 
 > but i can not complie it , the complier says Unbound
 > ..

Yes, "open" object type have an implicit type parameter that you have
to specify in the definition :

  type 'a t = 'a constraint <get_string: string; ..>

 > then how to open the type <get_string:string> in the
 > module SeqHashType ?
 > or it can not be opened at this situation ?

You cannot because in the module signature Hashtbl.HashedType, type t
isn't polymorph.

I guess the solution would be to use

  type t = <get_string:string>

and to coerce your objects to this

  (o :> SeqHashType.t)

-- 
   Olivier
-------------------
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-11-04 12:41 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-11-04  8:25 [Caml-list] how to open types pan deng
2002-11-04 12:41 ` Olivier Andrieu

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