[
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: | -- (:) |
| From: | Daniel de Rauglaudre <daniel.de_rauglaudre@i...> |
| Subject: | Re: [Caml-list] Type hidding |
Hi,
On Wed, Jan 16, 2002 at 09:09:48PM +0100, Warp wrote:
> external set_window_data : wnd:hwnd -> 'a -> unit = "set_window_data"
> external get_window_data : wnd:hwnd -> 'a = "get_window_data"
>
> I know that's very type-unsafe and all, but i really need the user to be
> able to put any kind of data into it. If you got another idea, please let me
> know.
If you don't want to give type parameters to hwnd, like suggested, and
if the stored values are monomorphic, you can use this system of
monomorphic dynamics.
The following function creates a system of dynamics, which are values
of type unit -> unit. It returns a couple a two functions, one to
convert any monomorphic type into a dynamic, the other returning a
value from its corresponding dynamic:
let make_dyn () =
let r = ref None in
let set x () = r := Some x in
let get d =
r := None;
d ();
match !r with
Some x -> x
| None -> failwith "bad type"
in
set, get
Example:
let set_int, get_int = make_dyn ()
let set_string, get_string = make_dyn ()
let x = set_int 32
let y = set_string "abc"
let z = set_int 8
get_int x
-> 32
get_int z
-> 8
get_string y
-> "abc"
get_int y
-> failed "bad type"
--
Daniel de RAUGLAUDRE
daniel.de_rauglaudre@inria.fr
http://cristal.inria.fr/~ddr/
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr