How to find out the C type signature corresponding to a Haskell function type in FFI?

Bulat Ziganshin bulat.ziganshin at gmail.com
Tue Mar 7 12:31:25 EST 2006


Hello Brian,

Tuesday, March 7, 2006, 7:35:27 PM, you wrote:

BH> foreign import ccall duma_init :: Int -> IO Int

int duma_init(int);

BH> I've tried looking at the wiki but that only seems to give specific
BH> examples. I'm trying to find what the mapping is between Haskell function
BH> signatures and C signatures is in general. Any ideas?

see official FFI documentation - http://www.cse.unsw.edu.au/~chak/haskell/ffi/ffi.pdf
and excellent paper "Tackling the awkward squad: monadic input/output, concurrency,
exceptions, and foreign-language calls in Haskell"
(http://research.microsoft.com/Users/simonpj/papers/marktoberdorf/marktoberdorf.ps.gz)

BH> Also, I really wanted to be able to use () -> IO () but () doesn't seem to
BH> be allowed in FFI...

void f(void);

foreign import ccall f :: IO ()

BH> A third point is, how would I pass an arbitrary monad instead of just using
BH> IO?

if you are sure what you do, you can even declare C function as pure:

foreign import ccall duma_init :: Int -> Int

-- 
Best regards,
 Bulat                            mailto:Bulat.Ziganshin at gmail.com



More information about the Glasgow-haskell-users mailing list