[project @ 2003-01-29 07:54:46 by panne]
[ghc-base.git] / Data / Array / IO.hs
index b225e4b..6a608fd 100644 (file)
@@ -24,9 +24,11 @@ module Data.Array.IO (
    -- * Overloaded mutable array interface
    module Data.Array.MArray,
 
+#ifdef __GLASGOW_HASKELL__
    -- * Doing I\/O with @IOUArray@s
    hGetArray,          -- :: Handle -> IOUArray Int Word8 -> Int -> IO Int
    hPutArray,          -- :: Handle -> IOUArray Int Word8 -> Int -> IO ()
+#endif
  ) where
 
 import Prelude
@@ -37,13 +39,17 @@ import Data.Int
 import Data.Word
 import Data.Dynamic
 
+#ifdef __HUGS__
+import Hugs.IOArray
+import Hugs.IOExts             ( unsafeCoerce )
+import Data.Array.Storable
+#endif
+
+#ifdef __GLASGOW_HASKELL__
 import Foreign.C
 import Foreign.Ptr             ( Ptr, FunPtr )
 import Foreign.StablePtr       ( StablePtr )
 
-#ifdef __GLASGOW_HASKELL__
--- GHC only to the end of file
-
 import Data.Array.Base
 import GHC.Arr         ( STArray, freezeSTArray, unsafeFreezeSTArray,
                           thawSTArray, unsafeThawSTArray )
@@ -55,6 +61,32 @@ import GHC.Handle
 import GHC.Conc
 
 import GHC.Base
+#endif /* __GLASGOW_HASKELL__ */
+
+#ifdef __HUGS__
+instance HasBounds IOArray where
+    bounds = boundsIOArray
+
+instance MArray IOArray e IO where
+    newArray    = newIOArray
+    unsafeRead  = unsafeReadIOArray
+    unsafeWrite = unsafeWriteIOArray
+
+type IOUArray = StorableArray
+
+castIOUArray :: IOUArray i a -> IO (IOUArray i b)
+castIOUArray marr = return (unsafeCoerce marr)
+#endif /* __HUGS__ */
+
+iOArrayTc :: TyCon
+iOArrayTc = mkTyCon "IOArray"
+
+instance (Typeable a, Typeable b) => Typeable (IOArray a b) where
+  typeOf a = mkAppTy iOArrayTc [typeOf ((undefined :: IOArray a b -> a) a),
+                               typeOf ((undefined :: IOArray a b -> b) a)]
+
+#ifdef __GLASGOW_HASKELL__
+-- GHC only to the end of file
 
 -----------------------------------------------------------------------------
 -- | Mutable, boxed, non-strict arrays in the 'IO' monad.  The type
@@ -66,13 +98,6 @@ import GHC.Base
 --
 newtype IOArray i e = IOArray (STArray RealWorld i e) deriving Eq
 
-iOArrayTc :: TyCon
-iOArrayTc = mkTyCon "IOArray"
-
-instance (Typeable a, Typeable b) => Typeable (IOArray a b) where
-  typeOf a = mkAppTy iOArrayTc [typeOf ((undefined :: IOArray a b -> a) a),
-                               typeOf ((undefined :: IOArray a b -> b) a)]
-
 instance HasBounds IOArray where
     {-# INLINE bounds #-}
     bounds (IOArray marr) = bounds marr