Re: Another call for votes

Axel Simon <[email protected]>
Newsgroups gmane.comp.lang.haskell.gui
Message-ID <[email protected]>
On Tue, Mar 18, 2003 at 06:46:42PM +0000, Glynn Clements wrote:
> Axel Simon wrote:
> >  I think this is one of the mid-level features we want to keep: A 
> > convenient syntax, not just a bunch of IO functions like
> > 
> > >  buttonOnClick    :: IO () -> Button -> IO ()
> > >  buttonGetOnClick :: Button -> IO (IO ())
> 
> The "convenient syntax" only makes sense if you view events and
> callbacks as being in 1:1 correspondence. Not all toolkits take this
> view. Xt has callback lists, where callbacks can be added and removed
> independently (callbacks are identified by equality on function
> pointers, which becomes problematic if you want to pass Haskell
> functions directly); similarly for the signal/slot approach.
 Gtk uses a very similar approach in that each event can have several 
callbacks registered and you can remove each callback individually. So I 
think my proposal serves this 1:n correspondance. You can say:

remove :: MVar (IO ()) <- newEmptyMVar 

button [label =: "Open Dialogs",
	on click := messageBox "hi there",
        onOff click remove := messageBox "bye there"]

which will attach two callbacks to the same event whereas the remove MVar 
will only get the unregister function for the second callback. If you want 
to remove both at a time you say:

button [label =: "Open Dialogs",
	opeonOff click remove =: messageBox "hi there",
        onOff click remove =: messageBox "bye there"]

and "withMVar remove id" as an IO action will remove both callbacks. Note:

a) fits into syntax
b) 1:n event:callback correspondance
c) the MVar approach is actually convenient in practice (as you need to 
store the unregister function/signal-id somewhere anyway)
d) can be implemented with equality on C function pointers under the hood 
if necessary

No?
Axel.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.