-- Stability : provisional
-- Portability : portable
--
--- Mapping of C types to corresponding Haskell types. A cool hack...
+-- Mapping of C types to corresponding Haskell types.
--
-----------------------------------------------------------------------------
module Foreign.C.Types
+#ifndef __NHC__
( -- Integral types, instances of: Eq, Ord, Num, Read, Show, Enum,
-- Typeable, Storable, Bounded, Real, Integral, Bits
- CChar(..), CSChar(..), CUChar(..)
- , CShort(..), CUShort(..), CInt(..), CUInt(..)
- , CLong(..), CULong(..)
- , CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
-#ifndef __HUGS__
- , CLLong(..), CULLong(..)
-#endif
+ CChar, CSChar, CUChar
+ , CShort, CUShort, CInt, CUInt
+ , CLong, CULong
+ , CPtrdiff, CSize, CWchar, CSigAtomic
+ , CLLong, CULLong
-- Numeric types, instances of: Eq, Ord, Num, Read, Show, Enum,
-- Typeable, Storable
- , CClock(..), CTime(..)
+ , CClock, CTime
-- Floating types, instances of: Eq, Ord, Num, Read, Show, Enum,
-- Typeable, Storable, Real, Fractional, Floating, RealFrac,
-- RealFloat
- , CFloat(..), CDouble(..), CLDouble(..)
+ , CFloat, CDouble, CLDouble
+#else
+ ( -- Exported non-abstractly in nhc98 to fix an interface file problem.
+ CChar(..), CSChar(..), CUChar(..)
+ , CShort(..), CUShort(..), CInt(..), CUInt(..)
+ , CLong(..), CULong(..)
+ , CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
+ , CLLong(..), CULLong(..)
+ , CClock(..), CTime(..)
+ , CFloat(..), CDouble(..), CLDouble(..)
+#endif
-- Instances of: Eq and Storable
, CFile, CFpos, CJmpBuf
#ifdef __NHC__
import NHC.FFI
- ( CChar(..), CSChar(..), CUChar(..)
- , CShort(..), CUShort(..), CInt(..), CUInt(..)
- , CLong(..), CULong(..), CLLong(..), CULLong(..)
- , CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
+ ( CChar(..), CSChar(..), CUChar(..)
+ , CShort(..), CUShort(..), CInt(..), CUInt(..)
+ , CLong(..), CULong(..), CLLong(..), CULLong(..)
+ , CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
, CClock(..), CTime(..)
- , CFloat(..), CDouble(..), CLDouble(..)
- , CFile, CFpos, CJmpBuf
+ , CFloat(..), CDouble(..), CLDouble(..)
+ , CFile, CFpos, CJmpBuf
, Storable(..)
)
#else
INTEGRAL_TYPE(CLong,tyConCLong,"CLong",HTYPE_LONG)
INTEGRAL_TYPE(CULong,tyConCULong,"CULong",HTYPE_UNSIGNED_LONG)
-#ifndef __HUGS__
INTEGRAL_TYPE(CLLong,tyConCLLong,"CLLong",HTYPE_LONG_LONG)
INTEGRAL_TYPE(CULLong,tyConCULLong,"CULLong",HTYPE_UNSIGNED_LONG_LONG)
-#endif
{-# RULES
"fromIntegral/a->CChar" fromIntegral = \x -> CChar (fromIntegral x)