Having a declaration like:

foreign export ccall "respond" respond :: CWString -> IO CWString

all the types in the corresponding _stub.h are HsPtr .

Wouldn't it be possible to write more specific types reflecting my expectations, i.e., wchar_t * ?

It would be nice in order to signal automatically to the C code which uses the Haskell functions that the types of the Haskell functions changed. In simple cases, one could simply include the stub.h, and get automatically an error if the C code doesn't match the new types.

I've tried using a CTYPE pragma (cf. #2979 (closed) , #8222 (closed) , and https://mail.haskell.org/pipermail/haskell/2012-February/023155.html ) on a newtype to get such results:

newtype {-# CTYPE "wchar_t *" #-} CWString' = CWString' CWString foreign export ccall "respond" respond :: CWString' -> IO CWString