Refactoring
authorRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 15 Sep 2008 07:43:15 +0000 (07:43 +0000)
committerRoman Leshchinskiy <rl@cse.unsw.edu.au>
Mon, 15 Sep 2008 07:43:15 +0000 (07:43 +0000)
Data/Vector/MVector.hs
Data/Vector/MVector/New.hs

index 5b3ce16..4dedb70 100644 (file)
@@ -17,7 +17,7 @@ module Data.Vector.MVector (
   MVectorPure(..), MVector(..),
 
   slice, new, newWith, read, write, copy, grow,
-  unstream, mstream, munstream,
+  unstream, transform,
   update, reverse
 ) where
 
@@ -186,6 +186,10 @@ munstream v s = v `seq` do
   where
     put i x = do { write v i x; return (i+1) }
 
+transform :: MVector v m a => (MStream m a -> MStream m a) -> v a -> m (v a)
+{-# INLINE_STREAM transform #-}
+transform f v = munstream v (f (mstream v))
+
 -- | Create a new mutable vector and fill it with elements from the 'Stream'.
 -- The vector will grow logarithmically if the 'Size' hint of the 'Stream' is
 -- inexact.
index fbfec71..f1efe7b 100644 (file)
@@ -33,10 +33,7 @@ unstream s = New (MVector.unstream s)
 
 inplace :: (forall m. Monad m => MStream m a -> MStream m a) -> New a -> New a
 {-# INLINE_STREAM inplace #-}
-inplace f (New p) = New (
-  do
-    v <- p
-    MVector.munstream v (f (MVector.mstream v)))
+inplace f (New p) = New (MVector.transform f =<< p)
 
 {-# RULES