> ... maybe I'm being stupid, but I don't see what the problem is. > Why can't mallocForeignPtr be implemented as:
> mallocForeignPtrBytes size = do > r <- c_malloc (fromIntegral size) > newForeignPtr r ptr_c_free > > foreign import ccall unsafe "malloc" > c_malloc :: CInt -> Ptr a > foreign import ccall unsafe "&free" > ptr_c_free :: ForeignPtr (Ptr a -> IO ()) > i.e. it's completely independent of MarshalAlloc.malloc. If you > happen to know that MarshalAlloc.malloc is the same as C's malloc, > then you could use that instead, but you don't have to. That's fine and, of course, it can be implemented that way. I guess the issue is that if someone wanted to use MarshalAlloc.free as a finalizer they would not be able to do so. Since we don't guarantee that MarshalAlloc.malloc is "stdio.h malloc", they couldn't portably cons up a compatible &free. The relevance to mallocForeignPtr and friends is only that I happened to notice the problem while implementing them. -- Alastair _______________________________________________ FFI mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/ffi