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

Sven Panne Sven.Panne at aedion.de
Thu Mar 9 07:40:53 EST 2006


Am Donnerstag, 9. März 2006 08:46 schrieb Bulat Ziganshin:
> Thursday, March 9, 2006, 2:20:00 AM, you wrote:
> >> foreign import ccall duma_init :: Int -> IO Int
>
> MQK> HsInt duma_init(HsInt arg);
> MQK> Or use int on the C side and CInt on the Haskell side.
> MQK> fromIntegral can be used for converting integers in Haskell.
>
> for small "home" projects you can even use "Int" and "int" which
> would work in most of Haskell implementations

Uh, oh... :-( This is roughly as "safe" as assuming that short, int, long, and 
long long are of the same size, so this is highly discouraged. The rationale 
behind the FFI addendum is as follows:

 * If you want to use a given C API, use the types from Foreign.C.Types on the 
Haskell side in the foreign imports.

 * If the C API is under your control, you have basically two options: Either 
use Foreign.C.Types as above, or use the types/preprocessor #defines in the 
HsFFI.h header to bind to basic Haskell types. Which option is better suited 
depends on what you are trying to achieve.

This should be easy enough to use and everything else is not guaranteed to 
work...

Cheers,
   S.


More information about the Glasgow-haskell-users mailing list