[
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: | Ceri Storey <cez@p...> |
| Subject: | Re: [Caml-list] Type hidding |
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. Could i suggest that you add a type variable to hwnd to make it type-safe? eg: instead of type hwnd = ... have: type 'a hwnd = ... so the functions would have the types: external set_window_data : wnd:'a hwnd -> 'a -> unit = "set_window_data" external get_window_data : wnd:'a hwnd -> 'a = "get_window_data" If hwnd is a pre-existing type (as i suspect it is) then you could create a type alias that uses phantom types (as far as i understand them, at least), ie: type 'a my_hwnd = hwnd This way you will ensure the same type of data is set / got from the window. > > BTW, then with my handle i'm doing that : > (set_window_data wnd 0); > (print_int (get_window_data wnd)); > > but it raises (about the call the get_window_data ) : > This expression has type wnd:hwnd -> 'a but is here used with type int This is an oddity with the use of compulsary labelled arguments, as introduced in ocaml 3.04. You need to specify the label of the argument passed, ie: set_window_data ~wnd:wnd 0; print_int (get_window_data ~wnd:wnd); Hope this helps.. -- Ceri Storey <cez@pkl.net> http://pkl.net/~cez/ vi(1)! postfix(7)! pie(5)! ------------------- 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