Foreign C with pointers

Don Stewart dons at
Tue Dec 18 13:58:53 EST 2007

>    Hi,
>    I am creating a binding to an existing library (lib*.a) from Haskell.
>    How can i bind a function that get a pointer?
>    e.g: I have in the c library.
>    int GetData( Data * d );
>    The steps that i need are:
>    1 - create the Data in Haskell
>    2 - create the foreign import sentence in a lib*.hs
>    3 - use the Data after the call
>    Where can i get a good tutorial about FFI? I try
>    [1] but it's too general (need i
>    pair of examples, i think)

Say we have:

     #include <string.h>

     void *
     memmove(void *dst, const void *src, size_t len);

We can bind to that as:

    foreign import unsafe ccall "string.h memmove"
        c_memmove :: Ptr Word8 -> Ptr Word8 -> CSize -> IO (Ptr Word8)

You can use Foreign.Ptr.* and Foreign.ForeignPtr (or even, say,
Data.ByteString) to get at Ptr on the Haskell side.

More information about the Glasgow-haskell-users mailing list