[Haskell-cafe] How can I pass IOUArrays to FFI functions?

Spencer Janssen sjanssen at cse.unl.edu
Mon Aug 20 10:59:13 EDT 2007

On Monday 20 August 2007 07:27:04 Ryan Ingram wrote:
> I have a C function of type
>    void f ( HsWord32* p0, HsWord32* p1, HsWord32 size );
> along with the FFI declaration:
>    foreign import ccall unsafe f :: Ptr Word32 -> Ptr Word32 -> Word32 ->
> IO ()
> In my Haskell code I have an unboxed IO array of Word32; IOUArray Int
> Word32.
> I want to pass the pointer to this array to f().  How can I get the pointer
> out of the array?  Or, is there a better way to declare f() to do this?
> I'm open to using GHC hackery; using v6.6.1 right now.
>   -- ryan

Perhaps you'd like to use Data.Array.Storable?  It supports the MArray
interface, and has the additional operation:

    withStorableArray :: StorableArray i e -> (Ptr e -> IO a) -> IO a

Spencer Janssen

More information about the Haskell-Cafe mailing list