Ptr and ForeignPtr Questions

Ashley Yakeley
Wed, 19 Sep 2001 18:37:46 -0700

The documentation for FFI in the GHC user's guide seems to be out of date 
with regard to passing Ptrs across.

1. My reference is 
(from <>)
Is this the latest documentation available?

2. My understanding is that you can use any instance of 'Storable a => 
Ptr a' as an FFI argument and return type for both imported and exported 
functions? Is this correct? What if the type is polymorphic (e.g. 
declared as 'Storable a => Ptr a' rather than something like 'Ptr Word8')?

3. What about ForeignPtr? Can instances of 'Storable a => ForeignPtr a' 
be used in FFI?

4. Does newForeignPtr work safely with null pointers, and will the 
finalizer get called? For instance:

     fp <- newForeignPtr nullPtr finalFunc;
     let {isNull = (foreignPtrToPtr fp) == nullPtr};
     r <- withForeign fp (\p -> foo p);

Will foo be passed nullPtr? Will finalFunc ever get called? Is my use, 
above, of foreignPtrToPtr safe, and will isNull be True?

Ashley Yakeley, Seattle WA