Alastair wrote [snip] > makeForeignPtr :: Ptr a -> FunPtr (Ptr a -> IO ()) -> IO ForeignObj
> [snip] I don't understand this proposal. What is a ForeignObj? Sorry, that was a typo. The result type should be IO (ForeignPtr a) > I call a C function, which gives me a cString :: Ptr CChar, and it's > my responsibility to free it when I've finished with it. So I > convert it to a ForeignPtr: > foreignPtr <- mkForeignPtr cString > and then always refer to the pointer via foreignPtr. When > foreignPtr is garbage collected the space is freed. So how do I do > this with your proposal? With the existing spec, you would write: > foreign import free :: Ptr CChar -> IO () > > foo = do > ... > foreignPtr <- newForeignPtr cString (free cString) > ... With my proposal, you would write: > foreign import "&" free :: FunPtr (Ptr CChar -> IO ()) > > foo = do > ... > foreignPtr <- newForeignPtr cString free > ... All the rest of your code to manipulate ForeignPtrs remains the same. (Well, there's a corresponding change in addForeignFinalizer if you happen to use that.) -- Alastair Reid [EMAIL PROTECTED] Reid Consulting (UK) Limited http://www.reid-consulting-uk.ltd.uk/alastair/ _______________________________________________ FFI mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/ffi