For GHC, implement the Typeable.hs macros using standalone deriving
[ghc-base.git] / Foreign / C / Types.hs
index 798c899..98113c8 100644 (file)
@@ -1,7 +1,15 @@
-{-# OPTIONS_GHC -XNoImplicitPrelude #-}
+{-# LANGUAGE CPP
+           , NoImplicitPrelude
+           , MagicHash
+           , GeneralizedNewtypeDeriving
+  #-}
 {-# OPTIONS_GHC -fno-warn-unused-binds #-}
+#ifdef __GLASGOW_HASKELL__
+{-# LANGUAGE DeriveDataTypeable, StandaloneDeriving #-}
+#endif
 -- XXX -fno-warn-unused-binds stops us warning about unused constructors,
 -- but really we should just remove them if we don't want them
+
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Foreign.C.Types
@@ -43,6 +51,14 @@ module Foreign.C.Types
           -- 'Prelude.Show', 'Prelude.Enum', 'Typeable' and 'Storable'.
         , CClock,   CTime
 
+        -- extracted from CTime, because we don't want this comment in
+        -- the Haskell 2010 report:
+
+        -- | 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
@@ -64,6 +80,7 @@ module Foreign.C.Types
         , CLLong(..),   CULLong(..)
         , CClock(..),   CTime(..)
         , CFloat(..),   CDouble(..), CLDouble(..)
+        , CIntPtr(..), CUIntPtr(..), CIntMax(..), CUIntMax(..)
 #endif
           -- ** Other types
 
@@ -77,7 +94,7 @@ import Foreign.Storable
 import Data.Bits        ( Bits(..) )
 import Data.Int         ( Int8,  Int16,  Int32,  Int64  )
 import Data.Word        ( Word8, Word16, Word32, Word64 )
-import {-# SOURCE #-} Data.Typeable (Typeable(typeOf), TyCon, mkTyCon, mkTyConApp)
+import {-# SOURCE #-} Data.Typeable
 
 #ifdef __GLASGOW_HASKELL__
 import GHC.Base
@@ -199,10 +216,6 @@ INTEGRAL_TYPE(CSigAtomic,tyConCSigAtomic,"CSigAtomic",HTYPE_SIG_ATOMIC_T)
 ARITHMETIC_TYPE(CClock,tyConCClock,"CClock",HTYPE_CLOCK_T)
 -- | Haskell type representing the C @time_t@ type.
 --
--- To convert to a @Data.Time.UTCTime@, use the following formula:
---
--- >  posixSecondsToUTCTime (realToFrac :: POSIXTime)
---
 ARITHMETIC_TYPE(CTime,tyConCTime,"CTime",HTYPE_TIME_T)
 
 -- FIXME: Implement and provide instances for Eq and Storable
@@ -280,6 +293,7 @@ import NHC.FFI
   , CPtrdiff(..), CSize(..),   CWchar(..), CSigAtomic(..)
   , CClock(..),   CTime(..)
   , CFloat(..),   CDouble(..), CLDouble(..)
+  , CIntPtr(..),  CUIntPtr(..),CIntMax(..), CUIntMax(..)
   , CFile,        CFpos,       CJmpBuf
   , Storable(..)
   )
@@ -317,5 +331,9 @@ INSTANCE_BITS(CPtrdiff)
 INSTANCE_BITS(CWchar)
 INSTANCE_BITS(CSigAtomic)
 INSTANCE_BITS(CSize)
+INSTANCE_BITS(CIntPtr)
+INSTANCE_BITS(CUIntPtr)
+INSTANCE_BITS(CIntMax)
+INSTANCE_BITS(CUIntMax)
 
 #endif