on master help sign in
Move foldlT to the Transformer module
commit50a3012958b50ed582ec8472d876712975d073e2 authorHarendra Kumar <harendra@composewell.com> dateFri 18 Nov 2022, 19:20 (4 years ago) parent380d6f2
3 files changed+11−17
core/src/Streamly/Internal/Data/Stream/Eliminate.hs−14 core/src/Streamly/Internal/Data/Stream/Transform.hs+2−2 core/src/Streamly/Internal/Data/Stream/Transformer.hs+9−1
core/src/Streamly/Internal/Data/Stream/Eliminate.hs−14
@@ -56,7 +56,6 @@ module Streamly.Internal.Data.Stream.Eliminate
5656 -- * Left Folds
5757 -- Lazy left folds are useful only for reversing the stream
5858 , foldlS
59− , foldlT
6059
6160 -- * Multi-Stream folds
6261 -- Full equivalence
@@ -80,7 +79,6 @@ where
8079
8180import Control.Monad.Catch (MonadThrow)
8281import Control.Monad.IO.Class (MonadIO(..))
83−import Control.Monad.Trans.Class (MonadTrans(..))
8482import Streamly.Internal.Data.Parser (Parser (..))
8583import Streamly.Internal.Data.Unboxed (Unbox)
8684
@@ -209,18 +207,6 @@ foldlS f z =
209207 (toStreamK z)
210208 . toStreamK
211209
212−-- | Lazy left fold to a transformer monad.
213−--
214−-- For example, to reverse a stream:
215−--
216−-- >>> input = Stream.fromList [1..5] :: Stream IO Int
217−-- >>> rev = Stream.fold Fold.toList $ Stream.foldlT (flip Stream.cons) Stream.nil input
218−--
219−{-# INLINE foldlT #-}
220−foldlT :: (Monad m, Monad (s m), MonadTrans s)
221− => (s m b -> a -> s m b) -> s m b -> Stream m a -> s m b
222−foldlT f z s = D.foldlT f z (toStreamD s)
223−
224210------------------------------------------------------------------------------
225211-- Running a Parser
226212------------------------------------------------------------------------------
core/src/Streamly/Internal/Data/Stream/Transform.hs+2−2
@@ -220,9 +220,9 @@ transform pipe xs = fromStreamD $ D.transform pipe (toStreamD xs)
220220--
221221-- Find if any element in the stream is 'True':
222222--
223−-- >>> step x xs = if odd x then return True else xs
223+-- >>> step x xs = if odd x then Stream.fromPure True else xs
224224-- >>> input = Stream.fromList (2:4:5:undefined) :: Stream IO Int
225−-- >>> Stream.fold Fold.toList $ Stream.foldrS step (return False) input
225+-- >>> Stream.fold Fold.toList $ Stream.foldrS step (Stream.fromPure False) input
226226-- [True]
227227--
228228-- Map (+2) on odd elements and filter out the even elements:
core/src/Streamly/Internal/Data/Stream/Transformer.hs+9−1
@@ -8,7 +8,8 @@
88
99module Streamly.Internal.Data.Stream.Transformer
1010 (
11− foldrT
11+ foldlT
12+ , foldrT
1213
1314 , liftInner
1415 , usingReaderT
@@ -32,6 +33,13 @@ import qualified Streamly.Internal.Data.Stream.StreamD.Transformer as D
3233-- >>> import Control.Monad.Trans.Identity (runIdentityT)
3334-- >>> import qualified Streamly.Internal.Data.Stream as Stream
3435
36+-- | Lazy left fold to a transformer monad.
37+--
38+{-# INLINE foldlT #-}
39+foldlT :: (Monad m, Monad (s m), MonadTrans s)
40+ => (s m b -> a -> s m b) -> s m b -> Stream m a -> s m b
41+foldlT f z s = D.foldlT f z (toStreamD s)
42+
3543-- | Right fold to a transformer monad. This is the most general right fold
3644-- function. 'foldrS' is a special case of 'foldrT', however 'foldrS'
3745-- implementation can be more efficient: