@@ -83,6 +83,7 @@ import qualified Streamly.Internal.Data.Stream.Async as Async
83import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
83import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
84import qualified Streamly.Internal.Data.Stream.Parallel as Par
84import qualified Streamly.Internal.Data.Stream.Parallel as Par
85import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
85import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
86+import qualified Streamly.Internal.Data.Stream.StreamK as K
86import qualified Streamly.Internal.Data.Stream.StreamD as D
87import qualified Streamly.Internal.Data.Stream.StreamD as D
87#ifdef USE_STREAMK_ONLY
88#ifdef USE_STREAMK_ONLY
88import qualified Streamly.Internal.Data.Stream.StreamK as S
89import qualified Streamly.Internal.Data.Stream.StreamK as S
@@ -309,15 +310,26 @@ foldContinue f s = D.foldContinue f $ IsStream.toStreamD s
309fold :: Monad m => Fold m a b -> SerialT m a -> m b
310fold :: Monad m => Fold m a b -> SerialT m a -> m b
310fold fl (SerialT strm) = D.fold fl $ D.fromStreamK strm
311fold fl (SerialT strm) = D.fold fl $ D.fromStreamK strm
312−-- XXX This shows quadratic performance when used recursively perhaps because
313+-- | Like 'fold' but also returns the remaining stream.
313−-- of StreamK to StreamD conversions not getting eliminated sue to recursion.
314+--
315+-- /Inhibits stream fusion/
314{-# INLINE foldBreak #-}
317{-# INLINE foldBreak #-}
315foldBreak :: Monad m => Fold m a b -> SerialT m a -> m (b, SerialT m a)
318foldBreak :: Monad m => Fold m a b -> SerialT m a -> m (b, SerialT m a)
320+-- XXX This shows quadratic performance when used recursively perhaps because
321+-- of StreamK to StreamD conversions not getting eliminated sue to recursion.
316foldBreak fl (SerialT strm) = fmap f $ D.foldBreak fl $ D.fromStreamK strm
322foldBreak fl (SerialT strm) = fmap f $ D.foldBreak fl $ D.fromStreamK strm
320 f (b, str) = (b, SerialT (D.toStreamK str))
326 f (b, str) = (b, SerialT (D.toStreamK str))
328+foldBreak fl (SerialT strm) = fmap f $ K.foldBreak fl strm
332+ f (b, str) = (b, SerialT str)
322------------------------------------------------------------------------------
334------------------------------------------------------------------------------
323-- Transformation
335-- Transformation