Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Type hidding
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ 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