| Portability | portable |
|---|---|
| Stability | provisional |
| Maintainer | ffi@haskell.org |
| Safe Haskell | Trustworthy |
Foreign.C.Types
Description
Mapping of C types to corresponding Haskell types.
- newtype CChar = CChar Word8
- newtype CSChar = CSChar Int8
- newtype CUChar = CUChar Word8
- newtype CShort = CShort Int16
- newtype CUShort = CUShort Word16
- newtype CInt = CInt Int32
- newtype CUInt = CUInt Word32
- newtype CLong = CLong Int32
- newtype CULong = CULong Word32
- newtype CPtrdiff = CPtrdiff Int32
- newtype CSize = CSize Word32
- newtype CWchar = CWchar Word32
- newtype CSigAtomic = CSigAtomic Int32
- newtype CLLong = CLLong Int64
- newtype CULLong = CULLong Word64
- newtype CIntPtr = CIntPtr Int32
- newtype CUIntPtr = CUIntPtr Word32
- newtype CIntMax = CIntMax Int64
- newtype CUIntMax = CUIntMax Word64
- newtype CClock = CClock Int32
- newtype CTime = CTime Int32
- newtype CUSeconds = CUSeconds Word32
- newtype CSUSeconds = CSUSeconds Int32
- newtype CFloat = CFloat Float
- newtype CDouble = CDouble Double
- data CFile
- data CFpos
- data CJmpBuf
Representations of C types
These types are needed to accurately represent C function prototypes,
in order to access C library interfaces in Haskell. The Haskell system
is not required to represent those types exactly as C does, but the
following guarantees are provided concerning a Haskell type CT
representing a C type t:
- If a C function prototype has
tas an argument or result type, the use ofCTin the corresponding position in a foreign declaration permits the Haskell program to access the full range of values encoded by the C type; and conversely, any Haskell value forCThas a valid representation in C. -
will yield the same value assizeOf(undefined:: CT)sizeof (t)in C. -
matches the alignment constraint enforced by the C implementation foralignment(undefined:: CT)t. - The members
peekandpokeof theStorableclass map all values ofCTto the corresponding value oftand vice versa. - When an instance of
Boundedis defined forCT, the values ofminBoundandmaxBoundcoincide witht_MINandt_MAXin C. - When an instance of
EqorOrdis defined forCT, the predicates defined by the type class implement the same relation as the corresponding predicate in C ont. - When an instance of
Num,Read,Integral,Fractional,Floating,RealFrac, orRealFloatis defined forCT, the arithmetic operations defined by the type class implement the same function as the corresponding arithmetic operations (if available) in C ont. - When an instance of
Bitsis defined forCT, the bitwise operation defined by the type class implement the same function as the corresponding bitwise operation in C ont.
Integral types
These types are are represented as newtypes of
types in Data.Int and Data.Word, and are instances of
Eq, Ord, Num, Read,
Show, Enum, Typeable, Storable,
Bounded, Real, Integral and
Bits.
newtype CChar
Haskell type representing the C char type.
newtype CSChar
Haskell type representing the C signed char type.
newtype CUChar
Haskell type representing the C unsigned char type.
newtype CShort
Haskell type representing the C short type.
newtype CUShort
Haskell type representing the C unsigned short type.
newtype CInt
Haskell type representing the C int type.
newtype CUInt
Haskell type representing the C unsigned int type.
newtype CLong
Haskell type representing the C long type.
newtype CULong
Haskell type representing the C unsigned long type.
newtype CPtrdiff
Haskell type representing the C ptrdiff_t type.
newtype CSize
Haskell type representing the C size_t type.
newtype CWchar
Haskell type representing the C wchar_t type.
newtype CLLong
Haskell type representing the C long long type.
newtype CULLong
Haskell type representing the C unsigned long long type.
newtype CIntPtr
newtype CUIntPtr
newtype CIntMax
newtype CUIntMax
Numeric types
These types are are represented as newtypes of basic
foreign types, and are instances of
Eq, Ord, Num, Read,
Show, Enum, Typeable and Storable.
newtype CClock
Haskell type representing the C clock_t type.
newtype CTime
Haskell type representing the C time_t type.
newtype CUSeconds
Haskell type representing the C useconds_t type.
To convert CTime to UTCTime, use the following formula:
posixSecondsToUTCTime (realToFrac :: POSIXTime)
Floating types
These types are are represented as newtypes of
Float and Double, and are instances of
Eq, Ord, Num, Read,
Show, Enum, Typeable, Storable,
Real, Fractional, Floating,
RealFrac and RealFloat.
newtype CFloat
Haskell type representing the C float type.
newtype CDouble
Haskell type representing the C double type.
Other types
data CFile
Haskell type representing the C FILE type.
data CFpos
Haskell type representing the C fpos_t type.
data CJmpBuf
Haskell type representing the C jmp_buf type.