@@ -83,6 +83,7 @@ import qualified Streamly.Internal.Data.Stream.Async as Async
8383import qualified Streamly.Internal.Data.Stream.IsStream.Type as IsStream
8484import qualified Streamly.Internal.Data.Stream.Parallel as Par
8585import qualified Streamly.Internal.Data.Stream.StreamK.Type as K
86+import qualified Streamly.Internal.Data.Stream.StreamK as K
8687import qualified Streamly.Internal.Data.Stream.StreamD as D
8788#ifdef USE_STREAMK_ONLY
8889import qualified Streamly.Internal.Data.Stream.StreamK as S
@@ -309,15 +310,26 @@ foldContinue f s = D.foldContinue f $ IsStream.toStreamD s
309310fold :: Monad m => Fold m a b -> SerialT m a -> m b
310311fold fl (SerialT strm) = D.fold fl $ D.fromStreamK strm
311312
312−-- XXX This shows quadratic performance when used recursively perhaps because
313−-- of StreamK to StreamD conversions not getting eliminated sue to recursion.
313+-- | Like 'fold' but also returns the remaining stream.
314+--
315+-- /Inhibits stream fusion/
316+--
314317{-# INLINE foldBreak #-}
315318foldBreak :: Monad m => Fold m a b -> SerialT m a -> m (b, SerialT m a)
319+{-
320+-- XXX This shows quadratic performance when used recursively perhaps because
321+-- of StreamK to StreamD conversions not getting eliminated sue to recursion.
316322foldBreak fl (SerialT strm) = fmap f $ D.foldBreak fl $ D.fromStreamK strm
317323
318324 where
319325
320326 f (b, str) = (b, SerialT (D.toStreamK str))
327+-}
328+foldBreak fl (SerialT strm) = fmap f $ K.foldBreak fl strm
329+
330+ where
331+
332+ f (b, str) = (b, SerialT str)
321333
322334------------------------------------------------------------------------------
323335-- Transformation