Evan Martin wrote:
Suppose I have a C function like this:
void register_callback(
void (*callback_fcn)(void *data),
void *callback_data,
void (*free_fcn)(void *data));
I think this is pretty common in C libraries. The idea is that you
can register a callback along with a pointer to some data to pass to
it, and when the C code is done with the callback+data it'll call your
free_fcn, again passing the same data.
I'd like to wrap this in Haskell, allowing me to pass in a Haskell
function as a callback.
The tricky part is that to pass in Haskell functions, I need to use
the FFI "wrapper" import, which means I need to later free them. But
the only place I can free them is within the "free" callback, and I've
just discovered this isn't allowed!
...
However, I discovered this thread, which indicates that having a
function free its FunPtr is not allowed:
http://www.haskell.org//pipermail/glasgow-haskell-users/2006-March/009907.html
My take on this is that it should be allowed, and when we revise the FFI
definition for Haskell' I think we should pin this down. Wolfgang Thaller
argued in that thread that we can reasonably expect to be able to implement it
for any architecture, and in fact GHC already does implement it for all
architectures (except for IA64, IIRC).
Cheers,
Simon
_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell