on master help sign in
Make the seed in foldIterateM monadic
58b7b77Harendra Kumar
benchmark/Streamly/Benchmark/Prelude/Serial/Transformation2.hs+2−1
@@ -145,7 +145,8 @@ foldIterateM :: Monad m => SerialT m Int -> m ()
145foldIterateM =
145foldIterateM =
146 S.drain
146 S.drain
147 . S.map getSum
147 . S.map getSum
148+ . Internal.foldIterateM
148− . Internal.foldIterateM (return . FL.take 2 . FL.sconcat) (Sum 0)
149+ (return . FL.take 2 . FL.sconcat) (return (Sum 0))
149 . S.map Sum
150 . S.map Sum
150
151
151o_1_space_grouping :: Int -> [Benchmark]
152o_1_space_grouping :: Int -> [Benchmark]
src/Streamly/Internal/Data/Stream/IsStream/Reduce.hs+2−2
@@ -316,7 +316,7 @@ foldSequence _f _m = undefined
316-- >>> import Data.Monoid (Sum(..))
316-- >>> import Data.Monoid (Sum(..))
317-- >>> f x = return (Fold.take 2 (Fold.sconcat x))
317-- >>> f x = return (Fold.take 2 (Fold.sconcat x))
318-- >>> s = Stream.map Sum $ Stream.fromList [1..10]
318-- >>> s = Stream.map Sum $ Stream.fromList [1..10]
319−-- >>> Stream.toList $ Stream.map getSum $ Stream.foldIterateM f 0 s
319+-- >>> Stream.toList $ Stream.map getSum $ Stream.foldIterateM f (pure 0) s
320-- [3,10,21,36,55,55]
320-- [3,10,21,36,55,55]
321--
321--
322-- @
322-- @
@@ -328,7 +328,7 @@ foldSequence _f _m = undefined
328--
328--
329{-# INLINE foldIterateM #-}
329{-# INLINE foldIterateM #-}
330foldIterateM ::
330foldIterateM ::
331− (IsStream t, Monad m) => (b -> m (Fold m a b)) -> b -> t m a -> t m b
331+ (IsStream t, Monad m) => (b -> m (Fold m a b)) -> m b -> t m a -> t m b
332foldIterateM f i m = fromStreamD $ D.foldIterateM f i (toStreamD m)
332foldIterateM f i m = fromStreamD $ D.foldIterateM f i (toStreamD m)
333
333
334------------------------------------------------------------------------------
334------------------------------------------------------------------------------
src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs+3−3
@@ -992,7 +992,7 @@ data FIterState s f m a b
992
992
993{-# INLINE_NORMAL foldIterateM #-}
993{-# INLINE_NORMAL foldIterateM #-}
994foldIterateM ::
994foldIterateM ::
995− Monad m => (b -> m (FL.Fold m a b)) -> b -> Stream m a -> Stream m b
995+ Monad m => (b -> m (FL.Fold m a b)) -> m b -> Stream m a -> Stream m b
996foldIterateM func seed0 (Stream step state) =
996foldIterateM func seed0 (Stream step state) =
997 Stream stepOuter (FIterInit state seed0)
997 Stream stepOuter (FIterInit state seed0)
998
998
@@ -1005,11 +1005,11 @@ foldIterateM func seed0 (Stream step state) =
1005 $ Skip
1005 $ Skip
1006 $ case res of
1006 $ case res of
1007 FL.Partial fs -> FIterStream st fstep fs extract
1007 FL.Partial fs -> FIterStream st fstep fs extract
1008− FL.Done fb -> FIterYield fb $ FIterInit st fb
1008+ FL.Done fb -> FIterYield fb $ FIterInit st (return fb)
1009
1009
1010 {-# INLINE_LATE stepOuter #-}
1010 {-# INLINE_LATE stepOuter #-}
1011 stepOuter _ (FIterInit st seed) = do
1011 stepOuter _ (FIterInit st seed) = do
1012− (FL.Fold fstep initial extract) <- func seed
1012+ (FL.Fold fstep initial extract) <- seed >>= func
1013 iterStep initial st fstep extract
1013 iterStep initial st fstep extract
1014 stepOuter gst (FIterStream st fstep fs extract) = do
1014 stepOuter gst (FIterStream st fstep fs extract) = do
1015 r <- step (adaptState gst) st
1015 r <- step (adaptState gst) st
test/Streamly/Test/Prelude/Serial.hs+1−1
@@ -496,7 +496,7 @@ foldIterateM =
496 $ S.map getSum
496 $ S.map getSum
497 $ IS.foldIterateM
497 $ IS.foldIterateM
498 (return . FL.take 1 . FL.sconcat)
498 (return . FL.take 1 . FL.sconcat)
499− (Sum 0)
499+ (return (Sum 0))
500 $ S.map Sum strm
500 $ S.map Sum strm
501 case ms2 of
501 case ms2 of
502 Nothing -> assert $ s1 == 0
502 Nothing -> assert $ s1 == 0