@@ -42,6 +42,7 @@ module Streamly.Internal.Data.Stream.Serial
42 -- * Transformation
42 -- * Transformation
46 -- * Deprecated
47 -- * Deprecated
@@ -72,12 +73,14 @@ import Text.Read
72 ( Lexeme(Ident), lexP, parens, prec, readPrec, readListPrec
73 ( Lexeme(Ident), lexP, parens, prec, readPrec, readListPrec
73 , readListPrecDefault)
74 , readListPrecDefault)
74import Streamly.Internal.BaseCompat ((#.), errorWithoutStackTrace, oneShot)
75import Streamly.Internal.BaseCompat ((#.), errorWithoutStackTrace, oneShot)
76+import Streamly.Internal.Data.Fold.Type (Fold)
75import Streamly.Internal.Data.Maybe.Strict (Maybe'(..), toMaybe)
77import Streamly.Internal.Data.Maybe.Strict (Maybe'(..), toMaybe)
76import Streamly.Internal.Data.Stream.StreamK.Type
78import Streamly.Internal.Data.Stream.StreamK.Type
77 (Stream, mkStream, foldStream)
79 (Stream, mkStream, foldStream)
79import qualified Streamly.Internal.Data.Stream.Common as P
81import qualified Streamly.Internal.Data.Stream.Common as P
80import qualified Streamly.Internal.Data.Stream.StreamD.Generate as D
82import qualified Streamly.Internal.Data.Stream.StreamD.Generate as D
83+import qualified Streamly.Internal.Data.Stream.StreamD.Transform as D
81import qualified Streamly.Internal.Data.Stream.StreamD.Type as D
84import qualified Streamly.Internal.Data.Stream.StreamD.Type as D
82import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
85import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
@@ -259,6 +262,23 @@ NFDATA1_INSTANCE(SerialT)
259FOLDABLE_INSTANCE(SerialT)
262FOLDABLE_INSTANCE(SerialT)
260TRAVERSABLE_INSTANCE(SerialT)
263TRAVERSABLE_INSTANCE(SerialT)
265+{-# INLINE toStreamD #-}
266+toStreamD :: Applicative m => SerialT m a -> D.Stream m a
267+toStreamD (SerialT m) = D.fromStreamK m
269+{-# INLINE fromStreamD #-}
270+fromStreamD :: Monad m => D.Stream m a -> SerialT m a
271+fromStreamD m = SerialT $ D.toStreamK m
273+-- | Use a filtering fold on a stream.
275+-- > Stream.sum $ Stream.foldFilter (Fold.satisfy (> 5)) $ Stream.fromList [1..10]
278+{-# INLINE foldFilter #-}
279+foldFilter :: Monad m => Fold m a (Maybe b) -> SerialT m a -> SerialT m b
280+foldFilter p = fromStreamD . D.foldFilter p . toStreamD
262------------------------------------------------------------------------------
282------------------------------------------------------------------------------
263-- WSerialT
283-- WSerialT
264------------------------------------------------------------------------------
284------------------------------------------------------------------------------