content: module Jhc.Type.C where
  
  import Jhc.Type.Word
  import Jhc.Type.Float
  
  -- | Haskell representation for @errno@ values.
  -- The implementation is deliberately exposed, to allow users to add
  -- their own definitions of 'Errno' values.
  newtype Errno = Errno CInt
  
  newtype {-# CTYPE "char" #-}           CChar    = CChar Int8
  newtype {-# CTYPE "signed char" #-}    CSChar   = CSChar Int8
  newtype {-# CTYPE "unsigned char" #-}  CUChar   = CUChar Word8
  newtype {-# CTYPE "short" #-}          CShort   = CShort Int16
  newtype {-# CTYPE "unsigned short" #-} CUShort  = CUShort Word16
  newtype {-# CTYPE "int" #-}            CInt     = CInt Int
  newtype {-# CTYPE "unsigned" #-}       CUInt    = CUInt Word
  newtype {-# CTYPE "long" #-}           CLong    = CLong IntPtr
  newtype {-# CTYPE "unsigned long" #-}  CULong   = CULong WordPtr
  newtype {-# CTYPE "long long" #-}      CLLong   = CLLong IntMax
  newtype {-# CTYPE "unsigned long long" #-} CULLong  = CULLong WordMax
  
  newtype CIntMax  = CIntMax IntMax
  newtype CUIntMax = CUIntMax WordMax
  newtype CIntPtr  = CIntPtr IntPtr
  newtype CUIntPtr = CUIntPtr WordPtr
  
  newtype CFloat   = CFloat Float
  newtype CDouble  = CDouble Double
  newtype {-# CTYPE "long double" #-} CLDouble = CLDouble Double
  
  newtype {-# CTYPE "wchar_t" #-}   CWchar   = CWchar Word32
  newtype {-# CTYPE "wint_t" #-}    CWint    = CWint Int32
  newtype {-# CTYPE "clock_t" #-}   CClock   = CClock IntMax
  newtype {-# CTYPE "ptrdiff_t" #-} CPtrdiff = CPtrdiff IntPtr
  newtype {-# CTYPE "size_t" #-}    CSize    = CSize WordPtr
  newtype {-# CTYPE "time_t" #-}    CTime    = CTime IntMax
  
  data {-# CTYPE "FILE" #-}        CFile
  data {-# CTYPE "jmp_buf" #-}     CJmpBuf
  data {-# CTYPE "fpos_t" #-}      CFpos
  data {-# CTYPE "sigatomic_t" #-} CSigAtomic
  