-- (c) The FFI task force, [2000..2001]
--
-- Haskell representation of the most important C ISO types not covered in the
-- module `CTypes'

module CTypesISO (
        -- Integral types; instances: Eq, Ord, Num, Read, Show, Enum,
        -- Storable, Bounded, Real, Integral
        --
        CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)

        -- Numeric types; instances: Eq, Ord, Num, Read, Show, Enum,
        -- Storable
        --
        CClock(..),  CTime(..),

        -- Opaque types, instances: Storable
        --
        CFile, CFpos, CJmpBuf
) where


import Int
import Word
import Storable (Storable(..))

-- the exact representations are architecture dependent

newtype CPtrdiff   = CPtrDiff   IntWordXY      -- ptrdiff_t
                   deriving (Eq, Ord, Enum, Bounded, Show, Read)
newtype CSize      = CSize      IntWordXY      -- size_t
                   deriving (Eq, Ord, Enum, Bounded, Show, Read)
newtype CWChar     = CWChar     IntWordXY      -- wchar_t
                   deriving (Eq, Ord, Enum, Bounded, Show, Read)
newtype CSigAtomic = CSigAtomic IntWordXY      -- sig_atomic_t
                   deriving (Eq, Ord, Enum, Bounded, Show, Read)

newtype CClock     = CClock ...                -- clock_t
                   deriving (Eq, Ord, Enum, Show, Read)
newtype CTime      = CTime  ...                -- time_t
                   deriving (Eq, Ord, Enum, Show, Read)

data CFile         = ...                       -- FILE
data CFpos         = ...                       -- fpos_t
data CJmpBuf       = ...                       -- jmp_buf

instance Num      CPtrDiff   where ...
instance Real     CPtrDiff   where ...
instance Integral CPtrDiff   where ...
instance Num      CSize      where ...
instance Real     CSize      where ...
instance Integral CSize      where ...
instance Num      CWChar     where ...
instance Real     CWChar     where ...
instance Integral CWChar     where ...
instance Num      CSigAtomic where ...
instance Real     CSigAtomic where ...
instance Integral CSigAtomic where ...

instance Num CClock where ...
instance Num CTime  where ...
