on master help sign in
Make the seed in foldIterateM monadic
commit58b7b7785760a45a7aeb8688fc80177c97aaf536 authorHarendra Kumar <harendra@composewell.com> dateSat 9 Oct 2021, 17:19 (5 years ago) parent28d9965
4 files changed+8−7
benchmark/Streamly/Benchmark/Prelude/Serial/Transformation2.hs+2−1 src/Streamly/Internal/Data/Stream/IsStream/Reduce.hs+2−2 src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs+3−3 test/Streamly/Test/Prelude/Serial.hs+1−1
benchmark/Streamly/Benchmark/Prelude/Serial/Transformation2.hs+2−1
@@ -145,7 +145,8 @@ foldIterateM :: Monad m => SerialT m Int -> m ()
145145foldIterateM =
146146 S.drain
147147 . S.map getSum
148− . Internal.foldIterateM (return . FL.take 2 . FL.sconcat) (Sum 0)
148+ . Internal.foldIterateM
149+ (return . FL.take 2 . FL.sconcat) (return (Sum 0))
149150 . S.map Sum
150151
151152o_1_space_grouping :: Int -> [Benchmark]
src/Streamly/Internal/Data/Stream/IsStream/Reduce.hs+2−2
@@ -316,7 +316,7 @@ foldSequence _f _m = undefined
316316-- >>> import Data.Monoid (Sum(..))
317317-- >>> f x = return (Fold.take 2 (Fold.sconcat x))
318318-- >>> 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
320320-- [3,10,21,36,55,55]
321321--
322322-- @
@@ -328,7 +328,7 @@ foldSequence _f _m = undefined
328328--
329329{-# INLINE foldIterateM #-}
330330foldIterateM ::
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
332332foldIterateM f i m = fromStreamD $ D.foldIterateM f i (toStreamD m)
333333
334334------------------------------------------------------------------------------
src/Streamly/Internal/Data/Stream/StreamD/Nesting.hs+3−3
@@ -992,7 +992,7 @@ data FIterState s f m a b
992992
993993{-# INLINE_NORMAL foldIterateM #-}
994994foldIterateM ::
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
996996foldIterateM func seed0 (Stream step state) =
997997 Stream stepOuter (FIterInit state seed0)
998998
@@ -1005,11 +1005,11 @@ foldIterateM func seed0 (Stream step state) =
10051005 $ Skip
10061006 $ case res of
10071007 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)
10091009
10101010 {-# INLINE_LATE stepOuter #-}
10111011 stepOuter _ (FIterInit st seed) = do
1012− (FL.Fold fstep initial extract) <- func seed
1012+ (FL.Fold fstep initial extract) <- seed >>= func
10131013 iterStep initial st fstep extract
10141014 stepOuter gst (FIterStream st fstep fs extract) = do
10151015 r <- step (adaptState gst) st
test/Streamly/Test/Prelude/Serial.hs+1−1
@@ -496,7 +496,7 @@ foldIterateM =
496496 $ S.map getSum
497497 $ IS.foldIterateM
498498 (return . FL.take 1 . FL.sconcat)
499− (Sum 0)
499+ (return (Sum 0))
500500 $ S.map Sum strm
501501 case ms2 of
502502 Nothing -> assert $ s1 == 0