David MENTRE <dmen...@linux-france.org> writes: > Hello, > > On Tue, Apr 7, 2009 at 07:48, Goswin von Brederlow <goswin-...@web.de> wrote: >> In the last 2 weeks I've been playing around with lots of different >> ways to do the same thing to get a feel for what style suites me >> best. If you have improvements or alternative ways of doing the two >> things below let me know. > > Well, if you are learning OCaml, I would advise you to read regular > OCaml code, e.g. the standard library. You'll learn The Right OCaml > Style(tm).
I've been using ocaml on and off for years now. Just trying out new things. >> Lets look another thing going in a similar direction. I want to >> have a structure where I can store key value pairs. But just for fun >> lets say I want to store values of different types and the key knows >> the type of value. In short a heterogeneous associative container: > > Well, why don't you just do: > > # type k = Int_k of int | Float_k of int;; > type k = Int_k of int | Float_k of int > # type v = Int_v of int | Float_v of float;; > type v = Int_v of int | Float_v of float > # let h = Hashtbl.create 3;; > val h : ('_a, '_b) Hashtbl.t = <abstr> > # Hashtbl.add h (Int_k 3) (Int_v 4);; > - : unit = () > # Hashtbl.add h (Float_k 5) (Float_v 0.6);; > - : unit = () That would allow storing a float value under an int key or vice versa. Something that would completly corrupt the on-disk format of my data. One could add runtime checks that prevent this but I would really like to have this ensured by the type system at compile time. And I would like to avoid having to write a private insert functions and public let insert_int k v = insert (Int_k k) (Int_v v) let insert_float k v = insert (Float_k k) (Float_v v) For that the storing data structure would have to know that there are int and float values and I would rather have the storing structure polymorphic. MfG Goswin _______________________________________________ Caml-list mailing list. Subscription management: http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list Archives: http://caml.inria.fr Beginner's list: http://groups.yahoo.com/group/ocaml_beginners Bug reports: http://caml.inria.fr/bin/caml-bugs