What is the equivalent Haskell type for C99 bool when using FFI?
c99, ffi, haskell
Solution
Since `sizeof(_Bool)` is implementation-defined in C99 (see ISO/IEC 9899:1999 6.2.5, 6.2.6 and 6.5.3.4/4), the obvious portable solution is to call such functions via wrappers that use `int` instead of `bool`. Alternatively, if you don't care about portability, you can check the documentation of your compiler to find out what is `sizeof(_Bool)` on your platform and use the corresponding FFI type.
My guess for the reason of `CBool` being absent from `Foreign.C.Types` is that the underlying C implementation is not expected to support all features of C99. One very widely-used compiler (MSVC) does not support C99 at all.
Problem
I have a library which uses C99 `bool` data type and I would like to call it via FFI. What is the corresponding type for C99 bool in Haskell? In Foreign.C.types there are CInt, CShort etc, but no CBool. If there is no "correct" type for `bool`, what is a safe alternative type to be passed in a function expecting a `bool`? An alternative approach would be to modify the C library but I would like to keep it intact.