@@ -75,7 +75,7 @@ import Streamly.Internal.Data.Fold.Type (Fold (..))
75import Streamly.Internal.Data.Stream.IsStream.Combinators (maxYields)
75import Streamly.Internal.Data.Stream.IsStream.Combinators (maxYields)
76import Streamly.Internal.Data.Stream.IsStream.Type
76import Streamly.Internal.Data.Stream.IsStream.Type
77 (IsStream(..), fromStreamD, toStreamD, fromStreamS, toStreamS)
77 (IsStream(..), fromStreamD, toStreamD, fromStreamS, toStreamS)
78−import Streamly.Internal.Data.Stream.Serial (SerialT)
78+import Streamly.Internal.Data.Stream.Serial (SerialT(..))
79import Streamly.Internal.Data.Time.Units (AbsTime, RelTime64, addToAbsTime64)
79import Streamly.Internal.Data.Time.Units (AbsTime, RelTime64, addToAbsTime64)
81import qualified Streamly.Internal.Data.Array.Foreign.Type as A
81import qualified Streamly.Internal.Data.Array.Foreign.Type as A
@@ -307,15 +307,17 @@ foldContinue f s = D.foldContinue f $ IsStream.toStreamD s
307-- @since 0.7.0
307-- @since 0.7.0
308{-# INLINE fold #-}
308{-# INLINE fold #-}
309fold :: Monad m => Fold m a b -> SerialT m a -> m b
309fold :: Monad m => Fold m a b -> SerialT m a -> m b
310−fold fl strm = do
310+fold fl (SerialT strm) = D.fold fl $ D.fromStreamK strm
311− (b, _) <- foldBreak fl strm
312+-- XXX This shows quadratic performance when used recursively perhaps because
313+-- of StreamK to StreamD conversions not getting eliminated sue to recursion.
314{-# INLINE foldBreak #-}
314{-# INLINE foldBreak #-}
315foldBreak :: Monad m => Fold m a b -> SerialT m a -> m (b, SerialT m a)
315foldBreak :: Monad m => Fold m a b -> SerialT m a -> m (b, SerialT m a)
316−foldBreak fl strm = do
316+foldBreak fl (SerialT strm) = fmap f $ D.foldBreak fl $ D.fromStreamK strm
317− (b, str) <- D.foldBreak fl $ IsStream.toStreamD strm
317+
318− return $! (b, IsStream.fromStreamD str)
318+ where
320+ f (b, str) = (b, SerialT (D.toStreamK str))
320------------------------------------------------------------------------------
322------------------------------------------------------------------------------
321-- Transformation
323-- Transformation