author Roman Leshchinskiy Sun, 6 Jul 2008 17:00:04 +0000 (17:00 +0000) committer Roman Leshchinskiy Sun, 6 Jul 2008 17:00:04 +0000 (17:00 +0000)
 Data/Vector.hs patch | blob | history Data/Vector/Unboxed.hs patch | blob | history

index dc6faac..9b0bfb9 100644 (file)
@@ -9,7 +9,7 @@ import qualified Data.Vector.Prim    as Prim
import qualified Data.Vector.Mutable as Mut

import qualified Data.Vector.Stream  as Stream
import qualified Data.Vector.Mutable as Mut

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 )

import Control.Exception ( assert )
import Control.Monad.ST  ( ST, runST )
@@ -44,20 +44,20 @@ new' n x init = runST (

stream :: Vector a -> Stream a
{-# INLINE_STREAM stream #-}

stream :: 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 #-}
where
n' = n+i

{-# INLINE get #-}
-    get j | j < n'    = Prim.at' arr j \$ \x -> Yield x (j+1)
-          | otherwise = Done
+    get j | j < n'    = Prim.at' arr j \$ \x -> Just (x, j+1)
+          | otherwise = Nothing

unstream :: Stream a -> Vector a
{-# INLINE_STREAM unstream #-}

unstream :: Stream a -> Vector a
{-# INLINE_STREAM unstream #-}
-unstream s@(Stream _ _ n) = new n (\mv ->
+unstream s = new (Stream.bound s) (\mv ->
do
do
-    n' <- Mut.fill mv s
-    return \$ Mut.slice mv 0 n'
+    n <- Mut.fill mv s
+    return \$ Mut.slice mv 0 n
)

{-# RULES
)

{-# RULES
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.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 )

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 :: 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 #-}
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 :: Unbox a => Stream a -> Vector a
{-# INLINE_STREAM unstream #-}
-unstream s@(Stream _ _ n) = new n (\mv ->
+unstream s = new (Stream.bound s) (\mv ->
do
do
-    n' <- Mut.fill mv s
-    return \$ Mut.slice mv 0 n'
+    n <- Mut.fill mv s
+    return \$ Mut.slice mv 0 n
)

{-# RULES
)

{-# RULES