David Sankel wrote: > Hello FFI experts, > > Say I have a function somewhere in c land with the following declaration: > > void doStuff( int &a, int &b);
That isn't C. Are you referring to C++ references, or did you mean: void doStuff(int *a, int *b); ? > What would the appropriate Haskell wrapper for this function look like? > I'm looking to construct a haskell function of the type: > > doStuff :: Int -> Int -> IO( (Int,Int) ) The direct translation would be: Ptr CInt -> Ptr CInt -> IO () Higher level interfaces, such as the one which you suggest, could be built upon that, e.g.: import Foreign.C(CInt) import Foreign.Ptr(Ptr) import Foreign.Marshal.Utils(with) import Foreign.Storable(peek) foreign import ccall doStuff :: Ptr CInt -> Ptr CInt -> IO () doStuff' :: Int -> Int -> IO (Int,Int) doStuff' x y = do with (fromIntegral x) $ \px -> with (fromIntegral y) $ \py -> do doStuff px py x' <- peek px y' <- peek py return (fromIntegral x', fromIntegral y') -- Glynn Clements <[EMAIL PROTECTED]> _______________________________________________ FFI mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/ffi