[Haskell-beginners] Ffi, memory allocation and failure
ch.gosch at googlemail.com
Wed Feb 9 09:45:09 CET 2011
I have a question about the FFI and interfacing to C++ via C.
I want to use funcionality that I have implemented a while ago
using C++ classes, and I also see this as an exercise on how to
create wrappers using the Haskell FFI.
The class I want to wrap first is a matrix class.
Here is the thing: In order to create a matrix object, I create a C function
that calls the C++ new operator, creating a matrix object, and
returning it as a void pointer.
Deletion is handled analogously.
Then in Haskell, I import the two functions, and I have a matrix type
newtype Matrix = Matrix (Ptr Matrix)
From this I create a ForeignPtr with newForeignPtr, giving the
deletion function (which calls the C++ destructor for a matrix)
Testing this showed me that it does work.
/But/: So far everything is happening in the IO monad. However, I want to
be able to work with matrices outside IO. Now, of course memory allocation
can fail, and I don't want to use something like unsafePerformIO when
there can actually be a failure when calling the constructor for a matrix.
Is there a recommended way to do this?
Also, is there a way to get memory from the Haskell runtime system in a safer
way and construct the object in that memory?
I hope I could make myself clear enough, as usual thanks for any hints!!
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Beginners