On Tue, 2010-03-02 at 13:19 -0800, Kimberly Wallmark wrote:
> I'm working with FFI to make a Haskell DLL that's called by C# code.   
> I understand how to share simple types.  I've found reasonable  
> documentation for struct-equivalents.  Is there a clean way to share  
> lists, or should I make a linked-list struct and do it manually?
> 
> In other words, if I have
>    adder :: CInt -> CInt -> CInt
>    adder x y = (x+y)
> 
> then I can use
>    foreign export stdcall adder :: CInt -> CInt -> CInt
> 
> and on the other side it behaves like
>    int adder(int a, int b);
> 
> I'd like to know what to do if I have
>    squares :: [CInt] -> [CInt]
>    squares = map (^2)
> 
> Advice?
> 
> --Kim

You have to marshal it from/into C array so:

foreign export stdcall squares :: Int -> Ptr CInt -> Ptr CInt -> IO ()

squares n f t = pokeArray t =<< map (^2) `fmap` peekArray n f

Regards

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to