From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id LAA09095; Thu, 17 Jan 2002 11:57:44 +0100 (MET) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from concorde.inria.fr (concorde.inria.fr [192.93.2.39]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id LAA09400 for ; Thu, 17 Jan 2002 11:57:44 +0100 (MET) Received: from verdot.inria.fr (verdot.inria.fr [128.93.11.7]) by concorde.inria.fr (8.11.1/8.11.1) with ESMTP id g0HAvhX00546 for ; Thu, 17 Jan 2002 11:57:43 +0100 (MET) Received: (from ddr@localhost) by verdot.inria.fr (8.9.3/8.9.3) id LAA24240 for caml-list@inria.fr; Thu, 17 Jan 2002 11:57:43 +0100 Date: Thu, 17 Jan 2002 11:57:43 +0100 From: Daniel de Rauglaudre To: caml-list@inria.fr Subject: Re: [Caml-list] Type hidding Message-ID: <20020117115743.G23800@verdot.inria.fr> References: <001601c19ec9$bfe251e0$eb00a8c0@warp> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5i In-Reply-To: <001601c19ec9$bfe251e0$eb00a8c0@warp>; from warplayer@free.fr on Wed, Jan 16, 2002 at 09:09:48PM +0100 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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