Change name of unfold to unfoldr and export an implementation for IVector
authorMax Bolingbroke <batterseapower@hotmail.com>
Sat, 7 Feb 2009 09:53:43 +0000 (09:53 +0000)
committerMax Bolingbroke <batterseapower@hotmail.com>
Sat, 7 Feb 2009 09:53:43 +0000 (09:53 +0000)
Data/Vector/Fusion/Stream.hs
Data/Vector/Fusion/Stream/Monadic.hs
Data/Vector/IVector.hs
Data/Vector/MVector.hs

index 0c6ac95..22fdfde 100644 (file)
@@ -46,7 +46,7 @@ module Data.Vector.Fusion.Stream (
   foldl, foldl1, foldl', foldl1', foldr, foldr1,
 
   -- * Unfolding
-  unfold,
+  unfoldr,
 
   -- * Scans
   prescanl, prescanl',
@@ -294,9 +294,9 @@ foldr1 f = unId . M.foldr1 f
 -- ---------
 
 -- | Unfold
-unfold :: (s -> Maybe (a, s)) -> s -> Stream a
-{-# INLINE unfold #-}
-unfold = M.unfold
+unfoldr :: (s -> Maybe (a, s)) -> s -> Stream a
+{-# INLINE unfoldr #-}
+unfoldr = M.unfoldr
 
 -- Scans
 -- -----
index ce9ada7..c3fafe1 100644 (file)
@@ -47,7 +47,7 @@ module Data.Vector.Fusion.Stream.Monadic (
   foldr, foldrM, foldr1, foldr1M,
 
   -- * Unfolding
-  unfold, unfoldM,
+  unfoldr, unfoldrM,
 
   -- * Scans
   prescanl, prescanlM, prescanl', prescanlM',
@@ -628,14 +628,14 @@ foldr1M f (Stream step s _) = foldr1M_go0 s
 -- ---------
 
 -- | Unfold
-unfold :: Monad m => (s -> Maybe (a, s)) -> s -> Stream m a
-{-# INLINE_STREAM unfold #-}
-unfold f = unfoldM (return . f)
+unfoldr :: Monad m => (s -> Maybe (a, s)) -> s -> Stream m a
+{-# INLINE_STREAM unfoldr #-}
+unfoldr f = unfoldrM (return . f)
 
 -- | Unfold with a monadic function
-unfoldM :: Monad m => (s -> m (Maybe (a, s))) -> s -> Stream m a
-{-# INLINE_STREAM unfoldM #-}
-unfoldM f s = Stream step s Unknown
+unfoldrM :: Monad m => (s -> m (Maybe (a, s))) -> s -> Stream m a
+{-# INLINE_STREAM unfoldrM #-}
+unfoldrM f s = Stream step s Unknown
   where
     {-# INLINE step #-}
     step s = liftM (\r ->
index 8b1d9f1..4f218d8 100644 (file)
@@ -48,6 +48,9 @@ module Data.Vector.IVector (
   -- * Folding
   foldl, foldl1, foldl', foldl1', foldr, foldr1,
 
+  -- * Unfolding
+  unfoldr,
+
   -- * Scans
   prescanl, prescanl',
 
@@ -141,7 +144,7 @@ new' _ m = vnew (New.run m)
 -- | Convert a vector to a 'Stream'
 stream :: IVector v a => v a -> Stream a
 {-# INLINE_STREAM stream #-}
-stream v = v `seq` (Stream.unfold get 0 `Stream.sized` Exact n)
+stream v = v `seq` (Stream.unfoldr get 0 `Stream.sized` Exact n)
   where
     n = length v
 
@@ -480,6 +483,13 @@ foldr1 :: IVector v a => (a -> a -> a) -> v a -> a
 {-# INLINE foldr1 #-}
 foldr1 f = Stream.foldr1 f . stream
 
+-- Unfolding
+-- ---------
+
+unfoldr :: IVector v a => (b -> Maybe (a, b)) -> b -> v a
+{-# INLINE unfoldr #-}
+unfoldr f = unstream . Stream.unfoldr f
+
 -- Scans
 -- -----
 
index 33dc033..4770eda 100644 (file)
@@ -169,7 +169,7 @@ grow v by = assert (by >= 0)
 
 mstream :: MVector v m a => v a -> MStream m a
 {-# INLINE mstream #-}
-mstream v = v `seq` (MStream.unfoldM get 0 `MStream.sized` Exact n)
+mstream v = v `seq` (MStream.unfoldrM get 0 `MStream.sized` Exact n)
   where
     n = length v