[Haskell-cafe] FFI and pointers to pointers
Dimitry Golubovsky
golubovsky at gmail.com
Fri Apr 22 11:18:13 EDT 2005
Hi,
I am trying to generalize my knowledge about FFI declarations when
dealing with pointers to pointers (import from C to Haskell). Maybe
these are silly questions, but It seems to me, I am missing some
understanding.
Per the FFI Addendum:
For a variable, we use "&" import:
int bar;
foreign import ccall "&" bar :: Ptr CInt
If we have int *pbar;, will Ptr (Ptr CInt) be correct? For arbitrary
level of pointer nesting, will nesting of the same number of Ptr's be
correct?
For a function, we use "static" import:
int system (char *str);
foreign import ccall "static stdlib.h" system :: Ptr CChar -> IO CInt
but for a pointer to a function (i. e. a variable) we use:
int (*psystem) (char *str);
foreign import ccall "dynamic"
mkFun :: FunPtr (CInt -> IO ()) -> (CInt -> IO ())
and then psystem should be declared as a variable with "&" import, I
believe. Or as a FunPtr?
And then (mkFun psystem) returns something to be called as a function.
Then (talking to myself) pointer to pointer to a function may be
imported as shown in the very beginning, i. e. by nesting Ptr's?
So indeed my question is: would nesting of Ptr's work if nested
pointers are imported?
I haven't experimented with this yet, but maybe someone has?
Thanks for any advice.
--
Dimitry Golubovsky
Anywhere on the Web
More information about the Haskell-Cafe
mailing list