This module is part of the language-dependent part of the Foreign Function
Interface (FFI) - for the language-independent part, see Section 5.13. It defines Haskell types that can hold the primitive
types of C and can directly be used in foreign import and export declarations.
All definitions are together with the remainder
of the C-specific marshalling support also available via the module
`CForeign` (Section 5.6).

Every type has a constructor of the same name, which is currently exported, too. Given the large set of instances for each type, it is not clear if access to the concrete representation is really necessary. Some experience is needed before a final decision can be made in this respect.

The following integral types have instances for the classes
`Eq`, `Ord`, `Num`,
`Read`, `Show`,
`Enum`, `Typeable`,
`Storable`, `Bounded`,
`Real`, `Integral`, and
`Bits`:

newtype CChar -- char newtype CSChar -- signed char newtype CUChar -- unsigned char newtype CShort -- short newtype CUShort -- unsigned short newtype CInt -- int newtype CUInt -- unsigned int newtype CLong -- long newtype CULong -- unsigned long newtype CLLong -- long long newtype CULLong -- unsigned long long |

The following floating types have instances for the classes
`Eq`, `Ord`, `Num`,
`Read`, `Show`,
`Enum`, `Typeable`,
`Storable`, `Real`,
`Fractional`, `Floating`,
`RealFrac`, and `RealFloat`:

newtype CFloat -- float newtype CDouble -- double newtype CLDouble -- long double |