[project @ 2003-07-31 09:28:47 by ralf]
[ghc-base.git] / Foreign / C / TypesISO.hs
index 464d2a7..ab2c928 100644 (file)
@@ -1,37 +1,59 @@
 {-# OPTIONS -fno-implicit-prelude #-}
 -----------------------------------------------------------------------------
--- 
+-- |
 -- Module      :  Foreign.C.TypesISO
 -- Copyright   :  (c) The FFI task force 2001
--- License     :  BSD-style (see the file libraries/core/LICENSE)
+-- License     :  BSD-style (see the file libraries/base/LICENSE)
 -- 
 -- Maintainer  :  ffi@haskell.org
 -- Stability   :  provisional
 -- Portability :  portable
 --
--- $Id: TypesISO.hs,v 1.2 2001/07/03 11:37:50 simonmar Exp $
---
 -- A mapping of C types defined by the ISO C standard to corresponding Haskell
 -- types. Like CTypes, this is a cool hack...
 --
 -----------------------------------------------------------------------------
 
+-- #hide
 module Foreign.C.TypesISO
+#ifndef __NHC__
        ( -- Integral types, instances of: Eq, Ord, Num, Read, Show, Enum,
          -- Typeable, Storable, Bounded, Real, Integral, Bits
-         CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
+         CPtrdiff, CSize, CWchar, CSigAtomic
 
          -- Numeric types, instances of: Eq, Ord, Num, Read, Show, Enum,
          -- Typeable, Storable
-       , CClock(..),   CTime(..),
+       , CClock,   CTime
+#else
+       ( -- For nhc98, these are exported non-abstractly to work around
+         -- an interface-file problem.
+         CPtrdiff(..), CSize(..), CWchar(..), CSigAtomic(..)
+       , CClock(..),   CTime(..)
+#endif
 
+          -- Instances of: Eq and Storable
        , CFile,        CFpos,     CJmpBuf
        ) where
 
+#ifdef __NHC__
+import NHC.FFI
+  ( CPtrdiff(..)
+  , CSize(..)
+  , CWchar(..)
+  , CSigAtomic(..)
+  , CClock(..)
+  , CTime(..)
+  , CFile
+  , CFpos
+  , CJmpBuf
+  )
+#else
+
 import Data.Bits       ( Bits(..) )
 import Data.Int
 import Data.Word
-import Data.Dynamic
+import Data.Typeable
+import Foreign.Storable
 
 #ifdef __GLASGOW_HASKELL__
 import GHC.Base
@@ -40,8 +62,12 @@ import GHC.Real
 import GHC.Show
 import GHC.Read
 import GHC.Num
+#else
+import Control.Monad
+import Foreign.Ptr
 #endif
 
+#include "Typeable.h"
 #include "CTypes.h"
 
 INTEGRAL_TYPE(CPtrdiff,tyConCPtrdiff,"CPtrdiff",HTYPE_PTRDIFF_T)
@@ -64,21 +90,12 @@ INTEGRAL_TYPE(CSigAtomic,tyConCSigAtomic,"CSigAtomic",HTYPE_SIG_ATOMIC_T)
 INTEGRAL_TYPE(CClock,tyConCClock,"CClock",HTYPE_CLOCK_T)
 INTEGRAL_TYPE(CTime,tyConCTime,"CTime",HTYPE_TIME_T)
 
--- TODO: Instances. But which...?  :-}
-
+-- FIXME: Implement and provide instances for Eq and Storable
 data CFile = CFile
-
 data CFpos = CFpos
-
 data CJmpBuf = CJmpBuf
 
 -- C99 types which are still missing include:
 -- intptr_t, uintptr_t, intmax_t, uintmax_t, wint_t, wctrans_t, wctype_t
 
-#include "Dynamic.h"
-INSTANCE_TYPEABLE0(CPtrdiff,cPtrdiffTc,"CPtrdiff")
-INSTANCE_TYPEABLE0(CSize,cSizeTc,"CSize")
-INSTANCE_TYPEABLE0(CWchar,cWcharTc,"CWchar")
-INSTANCE_TYPEABLE0(CSigAtomic,cSigAtomicTc,"CSigAtomic")
-INSTANCE_TYPEABLE0(CClock,cClockTc,"CClock")
-INSTANCE_TYPEABLE0(CTime,cTimeTc,"CTime")
+#endif