@@ -172,6 +172,8 @@ module Streamly.Internal.Prelude
172 -- , lprescanlM'
172 -- , lprescanlM'
174 -- ** Concurrent Transformation
174 -- ** Concurrent Transformation
175 , applyAsync
177 , applyAsync
@@ -413,9 +415,6 @@ module Streamly.Internal.Prelude
413 , usingStateT
415 , usingStateT
414 , runStateT
416 , runStateT
419 -- * MonadFix
418 -- * MonadFix
@@ -468,8 +467,7 @@ import Streamly.Internal.Data.Fold.Types (Fold (..), Fold2 (..))
468import Streamly.Internal.Data.Unfold.Types (Unfold)
467import Streamly.Internal.Data.Unfold.Types (Unfold)
469import Streamly.Internal.Memory.Array.Types (Array, writeNUnsafe)
468import Streamly.Internal.Memory.Array.Types (Array, writeNUnsafe)
470-- import Streamly.Memory.Ring (Ring)
469-- import Streamly.Memory.Ring (Ring)
471−import Streamly.Internal.Data.SVar (MonadAsync, State, defState)
470+import Streamly.Internal.Data.SVar (MonadAsync, defState)
472−import Streamly.Internal.Data.Stream.Async (mkAsync')
473import Streamly.Internal.Data.Stream.Combinators (inspectMode, maxYields)
471import Streamly.Internal.Data.Stream.Combinators (inspectMode, maxYields)
474import Streamly.Internal.Data.Stream.Prelude
472import Streamly.Internal.Data.Stream.Prelude
475 (fromStreamS, toStreamS, foldWith, foldMapWith, forEachWith)
473 (fromStreamS, toStreamS, foldWith, foldMapWith, forEachWith)
@@ -498,6 +496,7 @@ import qualified Streamly.Internal.Data.Stream.StreamK as S
498import qualified Streamly.Internal.Data.Stream.StreamD as S
496import qualified Streamly.Internal.Data.Stream.StreamD as S
499+-- import qualified Streamly.Internal.Data.Stream.Async as Async
501import qualified Streamly.Internal.Data.Stream.Serial as Serial
500import qualified Streamly.Internal.Data.Stream.Serial as Serial
502import qualified Streamly.Internal.Data.Stream.Parallel as Par
501import qualified Streamly.Internal.Data.Stream.Parallel as Par
503import qualified Streamly.Internal.Data.Stream.Zip as Z
502import qualified Streamly.Internal.Data.Stream.Zip as Z
@@ -1541,19 +1540,6 @@ toPureRev = foldl' (flip K.cons) K.nil
1541-- Concurrent Application
1540-- Concurrent Application
1542------------------------------------------------------------------------------
1541------------------------------------------------------------------------------
1544−-- XXX mkParallel is usually used to make serial streams concurrent by
1545−-- evaluating the stream in another thread. Ideally, we should not be creating
1546−-- an SVar if the stream itself is concurrent. For example, if we are zipping
1547−-- two streams that are concurrently composed, we should be able to pull from
1548−-- the SVar of that concurrent stream instead of creating another redundant
1549−-- SVar on top of it.
1551−{-# INLINE_NORMAL mkParallel #-}
1552−mkParallel :: (IsStream t, MonadAsync m)
1553− => State K.Stream m a -> t m a -> m (t m a)
1554−mkParallel st m = fmap fromStreamD $ D.mkParallel st (toStreamD m)
1555−-- mkParallel = Par.mkParallel
1557infixr 0 |$
1543infixr 0 |$
1558infixr 0 |$.
1544infixr 0 |$.
@@ -1586,11 +1572,10 @@ infixl 1 |&.
1586-- @since 0.3.0
1572-- @since 0.3.0
1587{-# INLINE (|$) #-}
1573{-# INLINE (|$) #-}
1588(|$) :: (IsStream t, MonadAsync m) => (t m a -> t m b) -> (t m a -> t m b)
1574(|$) :: (IsStream t, MonadAsync m) => (t m a -> t m b) -> (t m a -> t m b)
1589−f |$ x = D.fromStreamD $
1575+-- (|$) f = f . Async.mkAsync
1590− D.applyParallel (D.toStreamD . f . D.fromStreamD) (D.toStreamD x)
1576+(|$) f = f . D.mkParallel
1591−-- (|$) = Par.applyParallel
1593−-- | Same as (|$).
1578+-- | Same as '|$'.
1595-- /Internal/
1580-- /Internal/
@@ -1639,10 +1624,10 @@ x |& f = f |$ x
1639-- @since 0.3.0
1624-- @since 0.3.0
1640{-# INLINE (|$.) #-}
1625{-# INLINE (|$.) #-}
1641(|$.) :: (IsStream t, MonadAsync m) => (t m a -> m b) -> (t m a -> m b)
1626(|$.) :: (IsStream t, MonadAsync m) => (t m a -> m b) -> (t m a -> m b)
1642−(|$.) = D.foldParallel
1627+-- (|$.) f = f . Async.mkAsync
1643−-- (|$.) = Par.foldParallel
1628+(|$.) f = f . D.mkParallel
1645−-- | Same as '(|$.)'.
1630+-- | Same as '|$.'.
1647-- /Internal/
1632-- /Internal/
@@ -2404,10 +2389,7 @@ merge = mergeBy compare
2404-- @since 0.6.0
2389-- @since 0.6.0
2405mergeAsyncBy :: (IsStream t, MonadAsync m)
2390mergeAsyncBy :: (IsStream t, MonadAsync m)
2406 => (a -> a -> Ordering) -> t m a -> t m a -> t m a
2391 => (a -> a -> Ordering) -> t m a -> t m a -> t m a
2407−mergeAsyncBy f m1 m2 = K.mkStream $ \st stp sng yld -> do
2392+mergeAsyncBy f m1 m2 = K.mergeBy f (D.mkParallel m1) (D.mkParallel m2)
2408− ma <- mkAsync' st m1
2409− mb <- mkAsync' st m2
2410− K.foldStream st stp sng yld (K.mergeBy f ma mb)
2412-- | Like 'mergeByM' but merges concurrently (i.e. both the elements being
2394-- | Like 'mergeByM' but merges concurrently (i.e. both the elements being
2413-- merged are generated concurrently).
2395-- merged are generated concurrently).
@@ -2415,10 +2397,7 @@ mergeAsyncBy f m1 m2 = K.mkStream $ \st stp sng yld -> do
2415-- @since 0.6.0
2397-- @since 0.6.0
2416mergeAsyncByM :: (IsStream t, MonadAsync m)
2398mergeAsyncByM :: (IsStream t, MonadAsync m)
2417 => (a -> a -> m Ordering) -> t m a -> t m a -> t m a
2399 => (a -> a -> m Ordering) -> t m a -> t m a -> t m a
2418−mergeAsyncByM f m1 m2 = K.mkStream $ \st stp sng yld -> do
2400+mergeAsyncByM f m1 m2 = K.mergeByM f (D.mkParallel m1) (D.mkParallel m2)
2419− ma <- mkAsync' st m1
2420− mb <- mkAsync' st m2
2421− K.foldStream st stp sng yld (K.mergeByM f ma mb)
2423------------------------------------------------------------------------------
2402------------------------------------------------------------------------------
2424-- Nesting
2403-- Nesting