[Haskell-cafe] Problem using #define in .hsc files

Johan Tibell johan.tibell at gmail.com
Sun Mar 29 10:14:08 EDT 2009


Hi,

I'm trying to have hsc2hs interpret this snippet that picks a calling
convention to use for FFI imports:

#if !defined(CALLCONV)
#ifdef WITH_WINSOCK
#define CALLCONV stdcall
#else
#define CALLCONV ccall
#endif
#endif

foreign import CALLCONV unsafe "send"
    c_send :: CInt -> Ptr a -> CSize -> CInt -> IO CInt

Compiling results in:

parse error on input `CALLCONV'

Inspecting the generated .hs file shows that CALLCONV appear in the
source code instead of being replaced with either stdcall or ccall as
expected. What's the correct way to use #define in .hsc files?
Changing the file extension to .cpphs solves the problem, by using
plain CPP instead of hsc2hs I presume.

Cheers,

Johan


More information about the Haskell-Cafe mailing list