Foreign.C.Types

Copyright (c) The FFI task force 2001
License BSD-style (see the file libraries/base/LICENSE)
Maintainer [email protected]
Stability provisional
Portability portable
Safe Haskell Trustworthy
Language Haskell2010

Description

Mapping of C types to corresponding Haskell types.

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 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 Source

Haskell type representing the C char type.

Constructors

CChar Int8

newtype CSChar Source

Haskell type representing the C signed char type.

Constructors

CSChar Int8

newtype CUChar Source

Haskell type representing the C unsigned char type.

Constructors

CUChar Word8

newtype CShort Source

Haskell type representing the C short type.

Constructors

CShort Int16

newtype CUShort Source

Haskell type representing the C unsigned short type.

Constructors

CUShort Word16

newtype CInt Source

Haskell type representing the C int type.

Constructors

CInt Int32

newtype CUInt Source

Haskell type representing the C unsigned int type.

Constructors

CUInt Word32

newtype CLong Source

Haskell type representing the C long type.

Constructors

CLong Int64

newtype CULong Source

Haskell type representing the C unsigned long type.

Constructors

CULong Word64

newtype CPtrdiff Source

Haskell type representing the C ptrdiff_t type.

Constructors

CPtrdiff Int64

newtype CSize Source

Haskell type representing the C size_t type.

Constructors

CSize Word64

newtype CWchar Source

Haskell type representing the C wchar_t type.

Constructors

CWchar Int32

newtype CSigAtomic Source

Haskell type representing the C sig_atomic_t type.

Constructors

CSigAtomic Int32

newtype CLLong Source

Haskell type representing the C long long type.

Constructors

CLLong Int64

newtype CULLong Source

Haskell type representing the C unsigned long long type.

Constructors

CULLong Word64

newtype CIntPtr Source

Constructors

CIntPtr Int64

newtype CUIntPtr Source

Constructors

CUIntPtr Word64

newtype CIntMax Source

Constructors

CIntMax Int64

newtype CUIntMax Source

Constructors

CUIntMax Word64

Numeric types

These types are represented as newtypes of basic foreign types, and are instances of Eq, Ord, Num, Read, Show, Enum, Typeable and Storable.

newtype CClock Source

Haskell type representing the C clock_t type.

Constructors

CClock Int64

newtype CTime Source

Haskell type representing the C time_t type.

Constructors

CTime Int64

newtype CUSeconds Source

Haskell type representing the C useconds_t type.

Since: 4.4.0.0

Constructors

CUSeconds Word32

newtype CSUSeconds Source

Haskell type representing the C suseconds_t type.

Since: 4.4.0.0

Constructors

CSUSeconds Int64

To convert CTime to UTCTime, use the following:

\t -> posixSecondsToUTCTime (realToFrac t :: 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 Source

Haskell type representing the C float type.

Constructors

CFloat Float

newtype CDouble Source

Haskell type representing the C double type.

Constructors

CDouble Double

Other types

data CFile Source

Haskell type representing the C FILE type.

data CFpos Source

Haskell type representing the C fpos_t type.

data CJmpBuf Source

Haskell type representing the C jmp_buf type.

© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/7.10.3/docs/html/libraries/base-4.8.2.0/Foreign-C-Types.html