Unify D.V.Primitive.Mutable.{ST|IO}
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 16 Nov 2009 05:01:20 +0000 (05:01 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 16 Nov 2009 05:01:20 +0000 (05:01 +0000)
Data/Vector/Primitive/Mutable.hs [moved from Data/Vector/Primitive/Mutable/ST.hs with 66% similarity]
Data/Vector/Primitive/Mutable/IO.hs [deleted file]
vector.cabal

similarity index 66%
rename from Data/Vector/Primitive/Mutable/ST.hs
rename to Data/Vector/Primitive/Mutable.hs
index edbbe24..a2d5131 100644 (file)
@@ -1,35 +1,29 @@
-{-# LANGUAGE MagicHash, UnboxedTuples, MultiParamTypeClasses, FlexibleInstances, ScopedTypeVariables #-}
-
--- |
--- Module      : Data.Vector.Primitive.Mutable.ST
--- Copyright   : (c) Roman Leshchinskiy 2008
+{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, ScopedTypeVariables #-}
+-- Copyright   : (c) Roman Leshchinskiy 2008-2009
 -- License     : BSD-style
 --
 -- Maintainer  : Roman Leshchinskiy <rl@cse.unsw.edu.au>
 -- Stability   : experimental
 -- Portability : non-portable
 -- 
--- Mutable primitive vectors based in the ST monad.
+-- Mutable primitive vectors.
 --
 
-module Data.Vector.Primitive.Mutable.ST ( Vector(..) )
+module Data.Vector.Primitive.Mutable ( Vector(..) )
 where
 
 import qualified Data.Vector.MVector as MVector
 import           Data.Vector.MVector ( MVector, MVectorPure )
 import           Data.Primitive.ByteArray
 import           Data.Primitive ( Prim, sizeOf )
-
-import GHC.ST   ( ST(..) )
-
-import GHC.Base ( Int(..) )
+import           Control.Monad.Primitive
 
 -- | Mutable unboxed vectors. They live in the 'ST' monad.
-data Vector s a = Vector {-# UNPACK #-} !Int
+data Vector m a = Vector {-# UNPACK #-} !Int
                          {-# UNPACK #-} !Int
-                         {-# UNPACK #-} !(MutableByteArray s)
+                         {-# UNPACK #-} !(MutableByteArray m)
 
-instance Prim a => MVectorPure (Vector s) a where
+instance Prim a => MVectorPure (Vector m) a where
   length (Vector _ n _) = n
   unsafeSlice (Vector i _ arr) j m = Vector (i+j) m arr
 
@@ -41,7 +35,7 @@ instance Prim a => MVectorPure (Vector s) a where
       between x y z = x >= y && x < z
 
 
-instance Prim a => MVector (Vector s) (ST s) a where
+instance (Prim a, PrimMonad m) => MVector (Vector m) m a where
   {-# INLINE unsafeNew #-}
   unsafeNew n = do
                   arr <- newByteArray (n * sizeOf (undefined :: a))
diff --git a/Data/Vector/Primitive/Mutable/IO.hs b/Data/Vector/Primitive/Mutable/IO.hs
deleted file mode 100644 (file)
index dbd1499..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances #-}
-
--- |
--- Module      : Data.Vector.Mutable.Primitive.IO
--- Copyright   : (c) Roman Leshchinskiy 2009
--- License     : BSD-style
---
--- Maintainer  : Roman Leshchinskiy <rl@cse.unsw.edu.au>
--- Stability   : experimental
--- Portability : non-portable
--- 
--- Mutable primitive vectors in the IO monad.
---
-
-module Data.Vector.Primitive.Mutable.IO ( Vector(..) )
-where
-
-import           Data.Vector.MVector ( MVector(..), MVectorPure(..) )
-import qualified Data.Vector.Primitive.Mutable.ST as STV
-import           Data.Primitive ( Prim )
-
-import GHC.Base   ( RealWorld )
-import GHC.ST     ( ST(..) )
-import GHC.IOBase ( IO(..) )
-
-import Prelude hiding ( length )
-
--- | IO-based mutable vectors
-newtype Vector a = Vector (STV.Vector RealWorld a)
-
-instance Prim a => MVectorPure Vector a where
-  {-# INLINE length #-}
-  length (Vector v) = length v
-
-  {-# INLINE unsafeSlice #-}
-  unsafeSlice (Vector v) j m = Vector (unsafeSlice v j m)
-
-  {-# INLINE overlaps #-}
-  overlaps (Vector v1) (Vector v2) = overlaps v1 v2
-
-instance Prim a => MVector Vector IO a where
-  {-# INLINE unsafeNew #-}
-  unsafeNew n = Vector `fmap` stToIO (unsafeNew n)
-
-  {-# INLINE unsafeNewWith #-}
-  unsafeNewWith n x = Vector `fmap` stToIO (unsafeNewWith n x)
-
-  {-# INLINE unsafeRead #-}
-  unsafeRead (Vector v) i = stToIO (unsafeRead v i)
-
-  {-# INLINE unsafeWrite #-}
-  unsafeWrite (Vector v) i x = stToIO (unsafeWrite v i x)
-
-  {-# INLINE clear #-}
-  clear (Vector v) = stToIO (clear v)
-
-stToIO :: ST RealWorld a -> IO a
-stToIO (ST m) = IO m
-
index aae3f19..04db113 100644 (file)
@@ -44,8 +44,7 @@ Library
         Data.Vector.MVector.New
         Data.Vector.IVector
 
-        Data.Vector.Primitive.Mutable.ST
-        Data.Vector.Primitive.Mutable.IO
+        Data.Vector.Primitive.Mutable
         Data.Vector.Primitive
 
         Data.Vector.Storable.Internal