
I'm not sure I understand you, but I think what you're asking is
"how do I create a C wrapper of a Haskell function, so that I can pass
it to an imported C function"?
If that indeed is what you're asking, then allow me to post a
real-world example of how to do this:
-- create wrapper
type StreamCallback = Ptr CSoundStream -> Ptr () -> CInt -> Ptr () -> IO CSChar
foreign import ccall "wrapper" mkStreamCallbackRaw :: StreamCallback
-> IO (FunPtr StreamCallback)
-- the function which uses the wrapper
foreign import ccall "fmod.h FSOUND_Stream_SetEndCallback"
fsound_StreamEndCallbackRaw :: Ptr CSoundStream -> FunPtr
StreamCallback -> Ptr () -> IO CSChar
Then you can just call:
do callback <- mkStreamCallbackRaw myHaskellCallbackFunction
c <- fsound_StreamEndCallbackRaw soundStream callback nullPtr
/S
On Thu, 17 Mar 2005 14:11:31 -0600, John Goerzen
Hi,
I'm trying to make a Haskell binding for the FUSE library, http://fuse.sourceforge.net/. The FUSE concept is centered around a struct whose members are pointers to callback functions.
Here's the problem: the functions I want to callback to have types like this:
vGetLine :: HVFS a -> a -> IO String
Now, I can't just pass some sort of opaque pointer to C, because then the exact type of a would be lost.
Is there any other method I might try?
Thanks,
John _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
-- Sebastian Sylvan +46(0)736-818655 UIN: 44640862