Portability | portable |
---|---|
Stability | provisional |
Maintainer | ffi@haskell.org |
Mapping of C types to corresponding Haskell types.
- data CChar
- data CSChar
- data CUChar
- data CShort
- data CUShort
- data CInt
- data CUInt
- data CLong
- data CULong
- data CPtrdiff
- data CSize
- data CWchar
- data CSigAtomic
- data CLLong
- data CULLong
- data CIntPtr
- data CUIntPtr
- data CIntMax
- data CUIntMax
- data CClock
- data CTime
- data CFloat
- data CDouble
- 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 ofCT
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 forCT
has a valid representation in C. -
will yield the same value assizeOf
(Prelude.undefined
:: CT)sizeof (t)
in C. -
matches the alignment constraint enforced by the C implementation foralignment
(Prelude.undefined
:: CT)t
. - The members
peek
andpoke
of theStorable
class map all values ofCT
to the corresponding value oft
and vice versa. - When an instance of
Prelude.Bounded
is defined forCT
, the values ofPrelude.minBound
andPrelude.maxBound
coincide witht_MIN
andt_MAX
in C. - When an instance of
Prelude.Eq
orPrelude.Ord
is defined forCT
, the predicates defined by the type class implement the same relation as the corresponding predicate in C ont
. - When an instance of
Prelude.Num
,Prelude.Read
,Prelude.Integral
,Prelude.Fractional
,Prelude.Floating
,Prelude.RealFrac
, orPrelude.RealFloat
is 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
Bits
is 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 newtype
s 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
.
Haskell type representing the C char
type.
Haskell type representing the C signed char
type.
Haskell type representing the C unsigned char
type.
Haskell type representing the C short
type.
Haskell type representing the C unsigned short
type.
Haskell type representing the C int
type.
Haskell type representing the C unsigned int
type.
Haskell type representing the C long
type.
Haskell type representing the C unsigned long
type.
Haskell type representing the C ptrdiff_t
type.
Haskell type representing the C size_t
type.
Haskell type representing the C wchar_t
type.
data CSigAtomic Source
Haskell type representing the C sig_atomic_t
type.
Haskell type representing the C long long
type.
Haskell type representing the C unsigned long long
type.
Numeric types
These types are are represented as newtype
s of basic
foreign types, and are instances of
Prelude.Eq
, Prelude.Ord
, Prelude.Num
, Prelude.Read
,
Prelude.Show
, Prelude.Enum
, Typeable
and Storable
.
Haskell type representing the C clock_t
type.
Haskell type representing the C time_t
type.
To convert CTime
to Data.Time.UTCTime
, use the following formula:
posixSecondsToUTCTime (realToFrac :: POSIXTime)
Floating types
These types are are represented as newtype
s 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
.
Haskell type representing the C float
type.
Haskell type representing the C double
type.