Use new Stream functions
[darcs-mirrors/vector.git] / Data / Vector / Unboxed.hs
index 015a397..7daef6a 100644 (file)
@@ -10,7 +10,7 @@ import qualified Data.Vector.Unboxed.Mutable as Mut
 import           Data.Vector.Unboxed.Unbox ( Unbox )
 
 import qualified Data.Vector.Stream as Stream
-import           Data.Vector.Stream ( Step(..), Stream(..) )
+import           Data.Vector.Stream ( Stream )
 
 import Control.Exception ( assert )
 import Control.Monad.ST  ( ST, runST )
@@ -35,20 +35,20 @@ new n init = runST (
 
 stream :: Unbox a => Vector a -> Stream a
 {-# INLINE_STREAM stream #-}
-stream (Vector i n arr) = Stream get i n
+stream (Vector i n arr) = Stream.unfold get i n
   where
     n' = n+i
 
     {-# INLINE get #-}
-    get j | j < n'    = Yield (Prim.at arr j) (j+1)
-          | otherwise = Done
+    get j | j < n'    = Just (Prim.at arr j, j+1)
+          | otherwise = Nothing
 
 unstream :: Unbox a => Stream a -> Vector a
 {-# INLINE_STREAM unstream #-}
-unstream s@(Stream _ _ n) = new n (\mv ->
+unstream s = new (Stream.bound s) (\mv ->
   do
-    n' <- Mut.fill mv s
-    return $ Mut.slice mv 0 n'
+    n <- Mut.fill mv s
+    return $ Mut.slice mv 0 n
   )
 
 {-# RULES