Browse thread
Subtyping
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2009-04-07 (21:32) |
From: | Goswin von Brederlow <goswin-v-b@w...> |
Subject: | Re: [Caml-list] Subtyping |
David MENTRE <dmentre@linux-france.org> writes: > Hello, > > On Tue, Apr 7, 2009 at 07:48, Goswin von Brederlow <goswin-v-b@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