base-4.4.0.0: Basic libraries

Portabilityportable
Stabilityprovisional
Maintainerffi@haskell.org

Foreign.C.Types

Contents

Description

Mapping of C types to corresponding Haskell types.

Synopsis

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 (Prelude.undefined :: CT) will yield the same value as sizeof (t) in C.
  • alignment (Prelude.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 Prelude.Bounded is defined for CT, the values of Prelude.minBound and Prelude.maxBound coincide with t_MIN and t_MAX in C.
  • When an instance of Prelude.Eq or Prelude.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 Prelude.Num, Prelude.Read, Prelude.Integral, Prelude.Fractional, Prelude.Floating, Prelude.RealFrac, or Prelude.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 Prelude.Eq, Prelude.Ord, Prelude.Num, Prelude.Read, Prelude.Show, Prelude.Enum, Typeable, Storable, Prelude.Bounded, Prelude.Real, Prelude.Integral and Bits.

data CChar

Haskell type representing the C char type.

data CSChar

Haskell type representing the C signed char type.

data CUChar

Haskell type representing the C unsigned char type.

data CShort

Haskell type representing the C short type.

data CUShort

Haskell type representing the C unsigned short type.

data CInt

Haskell type representing the C int type.

data CUInt

Haskell type representing the C unsigned int type.

data CLong

Haskell type representing the C long type.

data CULong

Haskell type representing the C unsigned long type.

data CSize

Haskell type representing the C size_t type.

data CWchar

Haskell type representing the C wchar_t type.

data CLLong

Haskell type representing the C long long type.

data CULLong

Haskell type representing the C unsigned long long type.

Numeric types

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

data CClock

Haskell type representing the C clock_t type.

data CTime

Haskell type representing the C time_t type.

data CUSeconds

Haskell type representing the C useconds_t type.

To convert CTime to Data.Time.UTCTime, use the following formula:

  posixSecondsToUTCTime (realToFrac :: POSIXTime)

Floating types

These types are are represented as newtypes of Prelude.Float and Prelude.Double, and are instances of Prelude.Eq, Prelude.Ord, Prelude.Num, Prelude.Read, Prelude.Show, Prelude.Enum, Typeable, Storable, Prelude.Real, Prelude.Fractional, Prelude.Floating, Prelude.RealFrac and Prelude.RealFloat.

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.