Proposed change to ForeignPtr

Alastair Reid alastair at
Thu Aug 8 19:52:02 EDT 2002

Since requiring ForeignPtr.newForeignPtr would require preemptive
concurrency (see previosu discussion), I propose the following changes:

1) Add these functions:

  makeForeignPtr :: Ptr a -> FunPtr (Ptr a -> IO ()) -> IO ForeignObj
  attachForeignPtrFinalizer :: ForeignPtr a -> FunPtr (Ptr a -> IO ()) -> IO ()

2) Remove newForeignPtr and addForeignPtrFinalizer

Two variants on this proposal:

1) Reuse the old function names instead of inventing new ones.

   I don't care much either way.  

2) Instead of removing the old functions, rename them and mark them
   as an optional extra.  

   I think this would be a mistake - the GHC documentation is the
   right place to mention extensions which are not available on all
   ffi implementations.

I have implemented makeForeignPtr in Hugs (I didn't do
attachForeignPtrFinalizer yet because it'll take a bit longer to add
that functionality and we can compile most (all?) of the hierarchial
libs without it.

Alastair Reid                 alastair at  
Reid Consulting (UK) Limited

More information about the FFI mailing list