base-4.6.0.1: Basic libraries

Portability | portable
Stability | provisional
Maintainer | ffi@haskell.org
Safe Haskell | Trustworthy

Foreign.C.Types

Contents

- Representations of C types
  - Integral types
  - Numeric types
  - Floating types
  - Other types

Description

Mapping of C types to corresponding Haskell types.

Synopsis

- newtype CChar = CChar Int8
- 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 Int64
- newtype CULong = CULong Word64
- newtype CPtrdiff = CPtrdiff Int64
- newtype CSize = CSize Word64
- newtype CWchar = CWchar Int32
- newtype CSigAtomic = CSigAtomic Int32
- newtype CLLong = CLLong Int64
- newtype CULLong = CULLong Word64
- newtype CIntPtr = CIntPtr Int64
- newtype CUIntPtr = CUIntPtr Word64
- newtype CIntMax = CIntMax Int64
- newtype CUIntMax = CUIntMax Word64
- newtype CClock = CClock Int64
- newtype CTime = CTime Int64
- newtype CUSeconds = CUSeconds Word32
- newtype CSUSeconds = CSUSeconds Int64
- 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 `t` as an argument or result type, the use of `CT` in 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 for `CT` has a valid representation in C.
- ``sizeOf` (`undefined` :: CT)` will yield the same value as `sizeof (t)` in C.
- ``alignment` (`undefined` :: CT)` matches the alignment constraint enforced by the C implementation for `t`.
- The members `peek` and `poke` of the `Storable` class map all values of `CT` to the corresponding value of `t` and vice versa.
- When an instance of `Bounded` is defined for `CT`, the values of `minBound` and `maxBound` coincide with `t_MIN` and `t_MAX` in C.
- When an instance of `Eq` or `Ord` is defined for `CT`, the predicates defined by the type class implement the same relation as the corresponding predicate in C on `t`.
- When an instance of `Num`, `Read`, `Integral`, `Fractional`, `Floating`, `RealFrac`, or `RealFloat` is defined for `CT`, the arithmetic operations defined by the type class implement the same function as the corresponding arithmetic operations (if available) in C on `t`.
- When an instance of `Bits` is defined for `CT`, the bitwise operation defined by the type class implement the same function as the corresponding bitwise operation in C on `t`.

## Integral types

These types are are represented as `newtype`s 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.

Constructors

CChar Int8 |

Instances

Bounded CChar |
Enum CChar |
Eq CChar |
Integral CChar |
Num CChar |
Ord CChar |
Read CChar |
Real CChar |
Show CChar |
Typeable CChar |
Bits CChar |
Storable CChar |

newtype CSChar

Haskell type representing the C `signed char` type.

Constructors

CSChar Int8 |

Instances

Bounded CSChar |
Enum CSChar |
Eq CSChar |
Integral CSChar |
Num CSChar |
Ord CSChar |
Read CSChar |
Real CSChar |
Show CSChar |
Typeable CSChar |
Bits CSChar |
Storable CSChar |

newtype CUChar

Haskell type representing the C `unsigned char` type.

Constructors

CUChar Word8 |

Instances

Bounded CUChar |
Enum CUChar |
Eq CUChar |
Integral CUChar |
Num CUChar |
Ord CUChar |
Read CUChar |
Real CUChar |
Show CUChar |
Typeable CUChar |
Bits CUChar |
Storable CUChar |

newtype CShort

Haskell type representing the C `short` type.

Constructors

CShort Int16 |

Instances

Bounded CShort |
Enum CShort |
Eq CShort |
Integral CShort |
Num CShort |
Ord CShort |
Read CShort |
Real CShort |
Show CShort |
Typeable CShort |
Bits CShort |
Storable CShort |

newtype CUShort

Haskell type representing the C `unsigned short` type.

Constructors

CUShort Word16 |

Instances

Bounded CUShort |
Enum CUShort |
Eq CUShort |
Integral CUShort |
Num CUShort |
Ord CUShort |
Read CUShort |
Real CUShort |
Show CUShort |
Typeable CUShort |
Bits CUShort |
Storable CUShort |

newtype CInt

Haskell type representing the C `int` type.

Constructors

CInt Int32 |

Instances

Bounded CInt |
Enum CInt |
Eq CInt |
Integral CInt |
Num CInt |
Ord CInt |
Read CInt |
Real CInt |
Show CInt |
Typeable CInt |
Bits CInt |
Storable CInt |

newtype CUInt

Haskell type representing the C `unsigned int` type.

Constructors

CUInt Word32 |

Instances

Bounded CUInt |
Enum CUInt |
Eq CUInt |
Integral CUInt |
Num CUInt |
Ord CUInt |
Read CUInt |
Real CUInt |
Show CUInt |
Typeable CUInt |
Bits CUInt |
Storable CUInt |

newtype CLong

Haskell type representing the C `long` type.

Constructors

CLong Int64 |

Instances

Bounded CLong |
Enum CLong |
Eq CLong |
Integral CLong |
Num CLong |
Ord CLong |
Read CLong |
Real CLong |
Show CLong |
Typeable CLong |
Bits CLong |
Storable CLong |

newtype CULong

Haskell type representing the C `unsigned long` type.

Constructors

CULong Word64 |

Instances

Bounded CULong |
Enum CULong |
Eq CULong |
Integral CULong |
Num CULong |
Ord CULong |
Read CULong |
Real CULong |
Show CULong |
Typeable CULong |
Bits CULong |
Storable CULong |

newtype CPtrdiff

Haskell type representing the C `ptrdiff_t` type.

Constructors

CPtrdiff Int64 |

Instances

Bounded CPtrdiff |
Enum CPtrdiff |
Eq CPtrdiff |
Integral CPtrdiff |
Num CPtrdiff |
Ord CPtrdiff |
Read CPtrdiff |
Real CPtrdiff |
Show CPtrdiff |
Typeable CPtrdiff |
Bits CPtrdiff |
Storable CPtrdiff |

newtype CSize

Haskell type representing the C `size_t` type.

Constructors

CSize Word64 |

Instances

Bounded CSize |
Enum CSize |
Eq CSize |
Integral CSize |
Num CSize |
Ord CSize |
Read CSize |
Real CSize |
Show CSize |
Typeable CSize |
Bits CSize |
Storable CSize |

newtype CWchar

Haskell type representing the C `wchar_t` type.

Constructors

CWchar Int32 |

Instances

Bounded CWchar |
Enum CWchar |
Eq CWchar |
Integral CWchar |
Num CWchar |
Ord CWchar |
Read CWchar |
Real CWchar |
Show CWchar |
Typeable CWchar |
Bits CWchar |
Storable CWchar |

newtype CSigAtomic

Haskell type representing the C `sig_atomic_t` type.

Constructors

CSigAtomic Int32 |

Instances

Bounded CSigAtomic |
Enum CSigAtomic |
Eq CSigAtomic |
Integral CSigAtomic |
Num CSigAtomic |
Ord CSigAtomic |
Read CSigAtomic |
Real CSigAtomic |
Show CSigAtomic |
Typeable CSigAtomic |
Bits CSigAtomic |
Storable CSigAtomic |

newtype CLLong

Haskell type representing the C `long long` type.

Constructors

CLLong Int64 |

Instances

Bounded CLLong |
Enum CLLong |
Eq CLLong |
Integral CLLong |
Num CLLong |
Ord CLLong |
Read CLLong |
Real CLLong |
Show CLLong |
Typeable CLLong |
Bits CLLong |
Storable CLLong |

newtype CULLong

Haskell type representing the C `unsigned long long` type.

Constructors

CULLong Word64 |

Instances

Bounded CULLong |
Enum CULLong |
Eq CULLong |
Integral CULLong |
Num CULLong |
Ord CULLong |
Read CULLong |
Real CULLong |
Show CULLong |
Typeable CULLong |
Bits CULLong |
Storable CULLong |

newtype CIntPtr

Constructors

CIntPtr Int64 |

Instances

Bounded CIntPtr |
Enum CIntPtr |
Eq CIntPtr |
Integral CIntPtr |
Num CIntPtr |
Ord CIntPtr |
Read CIntPtr |
Real CIntPtr |
Show CIntPtr |
Typeable CIntPtr |
Bits CIntPtr |
Storable CIntPtr |

newtype CUIntPtr

Constructors

CUIntPtr Word64 |

Instances

Bounded CUIntPtr |
Enum CUIntPtr |
Eq CUIntPtr |
Integral CUIntPtr |
Num CUIntPtr |
Ord CUIntPtr |
Read CUIntPtr |
Real CUIntPtr |
Show CUIntPtr |
Typeable CUIntPtr |
Bits CUIntPtr |
Storable CUIntPtr |

newtype CIntMax

Constructors

CIntMax Int64 |

Instances

Bounded CIntMax |
Enum CIntMax |
Eq CIntMax |
Integral CIntMax |
Num CIntMax |
Ord CIntMax |
Read CIntMax |
Real CIntMax |
Show CIntMax |
Typeable CIntMax |
Bits CIntMax |
Storable CIntMax |

newtype CUIntMax

Constructors

CUIntMax Word64 |

Instances

Bounded CUIntMax |
Enum CUIntMax |
Eq CUIntMax |
Integral CUIntMax |
Num CUIntMax |
Ord CUIntMax |
Read CUIntMax |
Real CUIntMax |
Show CUIntMax |
Typeable CUIntMax |
Bits CUIntMax |
Storable CUIntMax |

## Numeric types

These types are are represented as `newtype`s 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.

Constructors

CClock Int64 |

Instances

Enum CClock |
Eq CClock |
Num CClock |
Ord CClock |
Read CClock |
Real CClock |
Show CClock |
Typeable CClock |
Storable CClock |

newtype CTime

Haskell type representing the C `time_t` type.

Constructors

CTime Int64 |

Instances

Enum CTime |
Eq CTime |
Num CTime |
Ord CTime |
Read CTime |
Real CTime |
Show CTime |
Typeable CTime |
Storable CTime |

newtype CUSeconds

Haskell type representing the C `useconds_t` type.

Constructors

CUSeconds Word32 |

Instances

Enum CUSeconds |
Eq CUSeconds |
Num CUSeconds |
Ord CUSeconds |
Read CUSeconds |
Real CUSeconds |
Show CUSeconds |
Typeable CUSeconds |
Storable CUSeconds |

newtype CSUSeconds

Haskell type representing the C `suseconds_t` type.

Constructors

CSUSeconds Int64 |

Instances

Enum CSUSeconds |
Eq CSUSeconds |
Num CSUSeconds |
Ord CSUSeconds |
Read CSUSeconds |
Real CSUSeconds |
Show CSUSeconds |
Typeable CSUSeconds |
Storable CSUSeconds |

To convert `CTime` to `UTCTime`, use the following formula:

      posixSecondsToUTCTime (realToFrac :: POSIXTime)

## Floating types

These types are are represented as `newtype`s 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.

Constructors

CFloat Float |

Instances

Enum CFloat |
Eq CFloat |
Floating CFloat |
Fractional CFloat |
Num CFloat |
Ord CFloat |
Read CFloat |
Real CFloat |
RealFloat CFloat |
RealFrac CFloat |
Show CFloat |
Typeable CFloat |
Storable CFloat |

newtype CDouble

Haskell type representing the C `double` type.

Constructors

CDouble Double |

Instances

Enum CDouble |
Eq CDouble |
Floating CDouble |
Fractional CDouble |
Num CDouble |
Ord CDouble |
Read CDouble |
Real CDouble |
RealFloat CDouble |
RealFrac CDouble |
Show CDouble |
Typeable CDouble |
Storable CDouble |

## 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.