on master help sign in
Remove the intermediate Concurrent/Time/Exception modules
fd93674Harendra Kumar
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentCommon.hs+2−2
@@ -14,12 +14,12 @@ where
14import Stream.Common
14import Stream.Common
15 (composeN, benchIO, benchIOSink, benchIOSrc, sourceUnfoldrM)
15 (composeN, benchIO, benchIOSink, benchIOSrc, sourceUnfoldrM)
16import Streamly.Data.Stream (Stream)
16import Streamly.Data.Stream (Stream)
17−import Streamly.Internal.Data.Stream.Concurrent (MonadAsync, Config)
17+import Streamly.Internal.Data.Stream.Prelude (MonadAsync, Config)
18
18
19import qualified Data.List as List
19import qualified Data.List as List
20import qualified Streamly.Data.Fold as Fold
20import qualified Streamly.Data.Fold as Fold
21import qualified Streamly.Data.Stream as Stream
21import qualified Streamly.Data.Stream as Stream
22−import qualified Streamly.Internal.Data.Stream.Concurrent as Async
22+import qualified Streamly.Internal.Data.Stream.Prelude as Async
23
23
24import Test.Tasty.Bench
24import Test.Tasty.Bench
25import Prelude hiding (mapM)
25import Prelude hiding (mapM)
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentEager.hs+1−1
@@ -9,7 +9,7 @@
9import Stream.ConcurrentCommon (allBenchmarks)
9import Stream.ConcurrentCommon (allBenchmarks)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
11
11
12−import qualified Streamly.Internal.Data.Stream.Concurrent as Async
12+import qualified Streamly.Internal.Data.Stream.Prelude as Async
13
13
14moduleName :: String
14moduleName :: String
15moduleName = "Data.Stream.ConcurrentEager"
15moduleName = "Data.Stream.ConcurrentEager"
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentInterleaved.hs+1−1
@@ -9,7 +9,7 @@
9import Stream.ConcurrentCommon (allBenchmarks)
9import Stream.ConcurrentCommon (allBenchmarks)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
11
11
12−import qualified Streamly.Internal.Data.Stream.Concurrent as Async
12+import qualified Streamly.Internal.Data.Stream.Prelude as Async
13
13
14moduleName :: String
14moduleName :: String
15moduleName = "Data.Stream.ConcurrentInterleaved"
15moduleName = "Data.Stream.ConcurrentInterleaved"
benchmark/Streamly/Benchmark/Data/Stream/ConcurrentOrdered.hs+1−1
@@ -9,7 +9,7 @@
9import Stream.ConcurrentCommon (allBenchmarks)
9import Stream.ConcurrentCommon (allBenchmarks)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
10import Streamly.Benchmark.Common (runWithCLIOpts, defaultStreamSize)
11
11
12−import qualified Streamly.Internal.Data.Stream.Concurrent as Async
12+import qualified Streamly.Internal.Data.Stream.Prelude as Async
13
13
14moduleName :: String
14moduleName :: String
15moduleName = "Data.Stream.ConcurrentOrdered"
15moduleName = "Data.Stream.ConcurrentOrdered"
benchmark/Streamly/Benchmark/Data/Stream/Exceptions.hs+1−1
@@ -42,7 +42,7 @@ import qualified Streamly.Internal.Data.Unfold.Prelude as IUF
42import qualified Streamly.Internal.Data.Stream.IsStream as Stream
42import qualified Streamly.Internal.Data.Stream.IsStream as Stream
43#else
43#else
44import qualified Streamly.Internal.Data.Stream as Stream
44import qualified Streamly.Internal.Data.Stream as Stream
45−import qualified Streamly.Internal.Data.Stream.Exception.Lifted as Stream
45+import qualified Streamly.Internal.Data.Stream.Prelude as Stream
46#endif
46#endif
47
47
48import Test.Tasty.Bench hiding (env)
48import Test.Tasty.Bench hiding (env)
benchmark/Streamly/Benchmark/Data/Stream/Reduce.hs+1−1
@@ -48,7 +48,7 @@ import Streamly.Internal.Data.Stream (Stream)
48import qualified Streamly.Internal.Data.Stream as S
48import qualified Streamly.Internal.Data.Stream as S
49#ifndef USE_STREAMLY_CORE
49#ifndef USE_STREAMLY_CORE
50import qualified Streamly.Data.Stream.Prelude as S
50import qualified Streamly.Data.Stream.Prelude as S
51−import qualified Streamly.Internal.Data.Stream.Time as S
51+import qualified Streamly.Internal.Data.Stream.Prelude as S
52#endif
52#endif
53
53
54#ifdef USE_STREAMK
54#ifdef USE_STREAMK
benchmark/Streamly/Benchmark/Data/Stream/Transform.hs+1−1
@@ -46,7 +46,7 @@ import Streamly.Internal.Data.Time.Units
46import Streamly.Internal.Data.Stream (Stream)
46import Streamly.Internal.Data.Stream (Stream)
47import qualified Streamly.Internal.Data.Stream as Stream
47import qualified Streamly.Internal.Data.Stream as Stream
48#ifndef USE_STREAMLY_CORE
48#ifndef USE_STREAMLY_CORE
49−import qualified Streamly.Internal.Data.Stream.Time as Stream
49+import qualified Streamly.Internal.Data.Stream.Prelude as Stream
50#endif
50#endif
51#ifdef USE_STREAMK
51#ifdef USE_STREAMK
52import Control.DeepSeq (NFData(..))
52import Control.DeepSeq (NFData(..))
src/Streamly/Data/Stream/Concurrent.hsdeleted−195
@@ -1,195 +0,0 @@
1−-- |
2−-- Module : Streamly.Data.Stream.Concurrent
3−-- Copyright : (c) 2022 Composewell Technologies
4−-- License : BSD-3-Clause
5−-- Maintainer : streamly@composewell.com
6−-- Stability : released
7−-- Portability : GHC
8−--
9−-- This module provides concurrent streaming abstractions.
10−--
11−-- == Programming Tips
12−--
13−-- The names in this module do not conflict with other stream modules,
14−-- therefore, you can import it in the same namespace:
15−--
16−-- >>> import qualified Streamly.Data.Stream.Concurrent as Stream
17−
18−module Streamly.Data.Stream.Concurrent
19− (
20− -- $concurrency
21−
22− -- ** Types
23− MonadAsync
24−
25− -- ** Configuration
26− , Config
27−
28− -- *** Limits
29− , maxThreads
30− , maxBuffer
31−
32− -- *** Rate Control
33− , Rate(..)
34− , rate
35− , avgRate
36− , minRate
37− , maxRate
38− , constRate
39−
40− -- *** Stop behavior
41− , StopWhen (..)
42− , stopWhen
43−
44− -- *** Scheduling behavior
45− , eager
46− , ordered
47− , interleaved
48−
49− -- *** Diagnostics
50− , inspect
51−
52− -- ** Combinators
53− -- | Stream combinators using a concurrent channel.
54−
55− -- *** Evaluate
56− -- | Evaluates a serial stream asynchronously using a concurency channel.
57−
58− , parEval
59−
60− -- *** Generate
61− -- | Uses a concurrency channel to evaluate multiple actions concurrently.
62− , parRepeatM
63− , parReplicateM
64− , fromCallback
65−
66− -- *** Map
67− -- | Uses a concurrency channel to evaluate multiple mapped actions
68− -- concurrently.
69−
70− , parMapM
71− , parSequence
72−
73− -- *** Combine two
74− -- | Use a channel for each pair.
75− , parZipWithM
76− , parZipWith
77− , parMergeByM
78− , parMergeBy
79−
80− -- *** List of streams
81− -- | Shares a single channel across many streams.
82−
83− , parList
84− -- , zipWithM
85− -- , zipWith
86−
87− -- *** Stream of streams
88− -- **** Apply
89−
90− , parApply
91−
92− -- **** Concat
93− -- | Shares a single channel across many streams.
94−
95− , parConcat
96− , parConcatMap
97−
98− -- **** ConcatIterate
99− , parConcatIterate
100−
101− -- *** Observation
102− , parTapCount
103−
104− -- ** Deprecated
105− , tapCount
106− )
107−where
108−
109−import Streamly.Internal.Data.Stream.Concurrent
110−import Prelude hiding (mapM, sequence, concat, concatMap, zipWith)
111−
112−-- $concurrency
113−--
114−-- == Channels
115−--
116−-- At a lower level, concurrency is implemented using channels that support
117−-- concurrent evaluation of streams. We create a channel, and add one or more
118−-- streams to it. The channel evaluates multiple streams concurrently and then
119−-- generates a single output stream from the results. How the streams are
120−-- combined depends on the configuration of the channel.
121−--
122−-- == Primitives
123−--
124−-- There are only a few fundamental abstractions for concurrency, 'parEval',
125−-- 'parConcatMap', and 'parConcatIterate', all concurrency combinators can be
126−-- expressed in terms of these.
127−--
128−-- 'parEval', evaluates a single stream asynchronously, a worker thread runs
129−-- the stream and buffers the results, and the consumer of the stream runs in
130−-- another thread consuming it from the buffer, thus decoupling the production
131−-- and consumption of the stream. This can be used to run different stages of a
132−-- pipeline concurrently.
133−--
134−-- 'parConcatMap' is used to evaluate multiple streams concurrently and combine
135−-- the results. A stream generator function is mapped to the input stream and
136−-- all the generated streams are then evaluated concurrently, and the results
137−-- are combined.
138−--
139−-- 'parConcatIterate' is like 'parConcatMap' but iterates a stream generator
140−-- function recursively over the stream. This can be used to traverse trees or
141−-- graphs.
142−--
143−-- == Configuration
144−--
145−-- Concurrent combinators take a 'Config' argument which controls the
146−-- concurrent behavior. For example, maximum number of threads to be used
147−-- ('maxThreads') or the maxmimum size of the buffer ('maxBuffer'), or how the
148−-- streams are scheduled with respect to each other ('interleaved'), or how the
149−-- results are consumed ('ordered').
150−--
151−-- Configuration is specified as @Config -> Config@ modifier functions that can
152−-- be composed together using function composition. For example, to specify the
153−-- maximum threads we can use @parConcatMap (maxThreads 10)@ if we also want to
154−-- specify the maximum buffer we can compose the two options @parConcatMap
155−-- (maxThreads 10 . maxBuffer 100)@. To use default configuration use 'id' as
156−-- the config modifier e.g. @parConcatMap id@.
157−--
158−-- See the @Configuration@ section and individual configuration options'
159−-- documentation for the default behavior and default values of configuration
160−-- parameters.
161−--
162−-- == Scheduling
163−--
164−-- The most important configuration option is to control whether the output of
165−-- the concurrent execution is consumed in the same order as the corresponding
166−-- actions in the input stream or as soon as they arrive. The default is the
167−-- latter, however, we can enforce the original order by using the 'ordered'
168−-- option.
169−--
170−-- Another important option controls whether the number of worker threads are
171−-- automatically increased and decreased based on the consumption rate or
172−-- threads are started as aggresively as possible until the 'maxThreads' or
173−-- 'maxBuffer' limits are hit. The default is the former. However, the 'eager'
174−-- option can be enabled to use the latter behavior. When 'eager' is on, even
175−-- if the stream consumer thread blocks it does not make any impact on the
176−-- scheduling of the available tasks.
177−--
178−-- == Combinators
179−--
180−-- Using the few fundamental concurrency primitives we can implement all the
181−-- usual streaming combinators with concurrent behavior. Combinators like
182−-- 'unfoldrM', 'iterateM' that are inherently serial can be evaluated
183−-- concurrently with respect to the consumer pipeline using 'parEval'.
184−-- Combinators like 'zipWithM', 'mergeByM' can also use 'parEval' on the input
185−-- streams to evaluate them concurrently before combining.
186−--
187−-- Combinators like 'repeatM', 'replicateM', 'fromListM', 'sequence', 'mapM' in
188−-- which all actions are independent of each other can be made concurrent using
189−-- the 'parConcatMap' operation.
190−--
191−-- A concurrent 'repeatM' repeats an action using multiple concurrent
192−-- executions of the action. Similarly, a concurrent 'mapM' performs the mapped
193−-- action in independent threads.
194−--
195−-- Some common concurrent combinators are provided in this module.
src/Streamly/Data/Stream/Exception.hsdeleted−23
@@ -1,23 +0,0 @@
1−-- |
2−-- Module : Streamly.Data.Stream.Exception
3−-- Copyright : (c) 2022 Composewell Technologies
4−-- License : BSD-3-Clause
5−-- Maintainer : streamly@composewell.com
6−-- Stability : released
7−-- Portability : GHC
8−--
9−-- This module is designed such that it does not conflict with
10−-- "Streamly.Data.Stream" module.
11−--
12−-- >>> import qualified Streamly.Data.Stream.Exception as Stream
13−--
14−module Streamly.Data.Stream.Exception
15− (
16− after
17− , bracket
18− -- , bracket3
19− , finally
20− )
21−where
22−
23−import Streamly.Internal.Data.Stream.Lifted (bracket, finally, after)
src/Streamly/Data/Stream/Prelude.hs+197−13
@@ -8,7 +8,8 @@
8--
8--
9-- All Stream related combinators including the streamly-core
9-- All Stream related combinators including the streamly-core
10-- "Streamly.Data.Stream" module, concurrency, time and lifted
10-- "Streamly.Data.Stream" module, concurrency, time and lifted
11−-- exception operations.
11+-- exception operations. For more pre-release operations also see
12+-- "Streamly.Internal.Data.Stream.Prelude" module.
12--
13--
13module Streamly.Data.Stream.Prelude
14module Streamly.Data.Stream.Prelude
14 (
15 (
@@ -17,22 +18,205 @@ module Streamly.Data.Stream.Prelude
17 -- module. For more pre-release combinators also see
18 -- module. For more pre-release combinators also see
18 -- "Streamly.Internal.Data.Stream" module.
19 -- "Streamly.Internal.Data.Stream" module.
19 module Streamly.Data.Stream
20 module Streamly.Data.Stream
21+
20 -- * Concurrent Operations
22 -- * Concurrent Operations
21− -- | Also see "Streamly.Internal.Data.Stream.Concurrent" for more
23+ -- $concurrency
22− -- pre-release functions.
24+
23− , module Streamly.Data.Stream.Concurrent
25+ -- ** Types
26+ , MonadAsync
27+
28+ -- ** Configuration
29+ , Config
30+
31+ -- *** Limits
32+ , maxThreads
33+ , maxBuffer
34+
35+ -- *** Rate Control
36+ , Rate(..)
37+ , rate
38+ , avgRate
39+ , minRate
40+ , maxRate
41+ , constRate
42+
43+ -- *** Stop behavior
44+ , StopWhen (..)
45+ , stopWhen
46+
47+ -- *** Scheduling behavior
48+ , eager
49+ , ordered
50+ , interleaved
51+
52+ -- *** Diagnostics
53+ , inspect
54+
55+ -- ** Combinators
56+ -- | Stream combinators using a concurrent channel.
57+
58+ -- *** Evaluate
59+ -- | Evaluates a serial stream asynchronously using a concurency channel.
60+
61+ , parEval
62+
63+ -- *** Generate
64+ -- | Uses a concurrency channel to evaluate multiple actions concurrently.
65+ , parRepeatM
66+ , parReplicateM
67+ , fromCallback
68+
69+ -- *** Map
70+ -- | Uses a concurrency channel to evaluate multiple mapped actions
71+ -- concurrently.
72+
73+ , parMapM
74+ , parSequence
75+
76+ -- *** Combine two
77+ -- | Use a channel for each pair.
78+ , parZipWithM
79+ , parZipWith
80+ , parMergeByM
81+ , parMergeBy
82+
83+ -- *** List of streams
84+ -- | Shares a single channel across many streams.
85+
86+ , parList
87+ -- , zipWithM
88+ -- , zipWith
89+
90+ -- *** Stream of streams
91+ -- **** Apply
92+
93+ , parApply
94+
95+ -- **** Concat
96+ -- | Shares a single channel across many streams.
97+
98+ , parConcat
99+ , parConcatMap
100+
101+ -- **** ConcatIterate
102+ , parConcatIterate
103+
104+ -- *** Observation
105+ , parTapCount
106+
24 -- * Time Related
107 -- * Time Related
25− -- | Also see "Streamly.Internal.Data.Stream.Time" for more pre-release
108+
26− -- functions.
109+ -- ** Timers
27− , module Streamly.Data.Stream.Time
110+ , interject
111+
112+ -- ** Trimming
113+ , takeInterval
114+ , dropInterval
115+
116+ -- ** Chunking
117+ , intervalsOf
118+
119+ -- ** Sampling
120+ , sampleIntervalEnd
121+ , sampleIntervalStart
122+ , sampleBurstEnd
123+ , sampleBurstStart
124+
28 -- * Lifted Exceptions
125 -- * Lifted Exceptions
29− -- | Also see "Streamly.Internal.Data.Stream.Exception.Lifted" for more
126+ , after
30− -- pre-release functions.
127+ , bracket
31− , module Streamly.Data.Stream.Exception
128+ -- , bracket3
129+ , finally
130+
131+ -- ** Deprecated
132+ , tapCount
32 )
133 )
33where
134where
34
135
35import Streamly.Data.Stream
136import Streamly.Data.Stream
36−import Streamly.Data.Stream.Concurrent
137+import Streamly.Internal.Data.Stream.Prelude
37−import Streamly.Data.Stream.Exception
138+
38−import Streamly.Data.Stream.Time
139+-- $concurrency
140+--
141+-- == Channels
142+--
143+-- At a lower level, concurrency is implemented using channels that support
144+-- concurrent evaluation of streams. We create a channel, and add one or more
145+-- streams to it. The channel evaluates multiple streams concurrently and then
146+-- generates a single output stream from the results. How the streams are
147+-- combined depends on the configuration of the channel.
148+--
149+-- == Primitives
150+--
151+-- There are only a few fundamental abstractions for concurrency, 'parEval',
152+-- 'parConcatMap', and 'parConcatIterate', all concurrency combinators can be
153+-- expressed in terms of these.
154+--
155+-- 'parEval', evaluates a single stream asynchronously, a worker thread runs
156+-- the stream and buffers the results, and the consumer of the stream runs in
157+-- another thread consuming it from the buffer, thus decoupling the production
158+-- and consumption of the stream. This can be used to run different stages of a
159+-- pipeline concurrently.
160+--
161+-- 'parConcatMap' is used to evaluate multiple streams concurrently and combine
162+-- the results. A stream generator function is mapped to the input stream and
163+-- all the generated streams are then evaluated concurrently, and the results
164+-- are combined.
165+--
166+-- 'parConcatIterate' is like 'parConcatMap' but iterates a stream generator
167+-- function recursively over the stream. This can be used to traverse trees or
168+-- graphs.
169+--
170+-- == Configuration
171+--
172+-- Concurrent combinators take a 'Config' argument which controls the
173+-- concurrent behavior. For example, maximum number of threads to be used
174+-- ('maxThreads') or the maxmimum size of the buffer ('maxBuffer'), or how the
175+-- streams are scheduled with respect to each other ('interleaved'), or how the
176+-- results are consumed ('ordered').
177+--
178+-- Configuration is specified as @Config -> Config@ modifier functions that can
179+-- be composed together using function composition. For example, to specify the
180+-- maximum threads we can use @parConcatMap (maxThreads 10)@ if we also want to
181+-- specify the maximum buffer we can compose the two options @parConcatMap
182+-- (maxThreads 10 . maxBuffer 100)@. To use default configuration use 'id' as
183+-- the config modifier e.g. @parConcatMap id@.
184+--
185+-- See the @Configuration@ section and individual configuration options'
186+-- documentation for the default behavior and default values of configuration
187+-- parameters.
188+--
189+-- == Scheduling
190+--
191+-- The most important configuration option is to control whether the output of
192+-- the concurrent execution is consumed in the same order as the corresponding
193+-- actions in the input stream or as soon as they arrive. The default is the
194+-- latter, however, we can enforce the original order by using the 'ordered'
195+-- option.
196+--
197+-- Another important option controls whether the number of worker threads are
198+-- automatically increased and decreased based on the consumption rate or
199+-- threads are started as aggresively as possible until the 'maxThreads' or
200+-- 'maxBuffer' limits are hit. The default is the former. However, the 'eager'
201+-- option can be enabled to use the latter behavior. When 'eager' is on, even
202+-- if the stream consumer thread blocks it does not make any impact on the
203+-- scheduling of the available tasks.
204+--
205+-- == Combinators
206+--
207+-- Using the few fundamental concurrency primitives we can implement all the
208+-- usual streaming combinators with concurrent behavior. Combinators like
209+-- 'unfoldrM', 'iterateM' that are inherently serial can be evaluated
210+-- concurrently with respect to the consumer pipeline using 'parEval'.
211+-- Combinators like 'zipWithM', 'mergeByM' can also use 'parEval' on the input
212+-- streams to evaluate them concurrently before combining.
213+--
214+-- Combinators like 'repeatM', 'replicateM', 'fromListM', 'sequence', 'mapM' in
215+-- which all actions are independent of each other can be made concurrent using
216+-- the 'parConcatMap' operation.
217+--
218+-- A concurrent 'repeatM' repeats an action using multiple concurrent
219+-- executions of the action. Similarly, a concurrent 'mapM' performs the mapped
220+-- action in independent threads.
221+--
222+-- Some common concurrent combinators are provided in this module.
src/Streamly/Data/Stream/Time.hsdeleted−36
@@ -1,36 +0,0 @@
1−-- |
2−-- Module : Streamly.Data.Stream.Time
3−-- Copyright : (c) 2022 Composewell Technologies
4−-- License : BSD-3-Clause
5−-- Maintainer : streamly@composewell.com
6−-- Stability : released
7−-- Portability : GHC
8−--
9−-- This module provides time related streaming abstractions.
10−--
11−-- The names in this module do not conflict with other stream modules,
12−-- therefore, you can import it in the same namespace:
13−--
14−-- >>> import qualified Streamly.Data.Stream.Time as Stream
15−--
16−module Streamly.Data.Stream.Time
17− (
18− -- ** Timers
19− interject
20−
21− -- ** Trimming
22− , takeInterval
23− , dropInterval
24−
25− -- ** Chunking
26− , intervalsOf
27−
28− -- ** Sampling
29− , sampleIntervalEnd
30− , sampleIntervalStart
31− , sampleBurstEnd
32− , sampleBurstStart
33− )
34−where
35−
36−import Streamly.Internal.Data.Stream.Time
src/Streamly/Internal/Data/Stream/Prelude.hsnew file+19
@@ -0,0 +1,19 @@
1+-- |
2+-- Module : Streamly.Internal.Data.Stream.Prelude
3+-- Copyright : (c) 2022 Composewell Technologies
4+-- License : BSD-3-Clause
5+-- Maintainer : streamly@composewell.com
6+-- Stability : experimental
7+-- Portability : GHC
8+--
9+module Streamly.Internal.Data.Stream.Prelude
10+ (
11+ module Streamly.Internal.Data.Stream.Concurrent
12+ , module Streamly.Internal.Data.Stream.Time
13+ , module Streamly.Internal.Data.Stream.Lifted
14+ )
15+where
16+
17+import Streamly.Internal.Data.Stream.Concurrent
18+import Streamly.Internal.Data.Stream.Time
19+import Streamly.Internal.Data.Stream.Lifted
src/Streamly/Internal/FileSystem/Event/Windows.hs+2−2
@@ -119,13 +119,13 @@ import System.Win32.Types (BOOL, DWORD, HANDLE, LPVOID, LPDWORD, failIfFalse_)
119
119
120import Streamly.Data.Array (Array)
120import Streamly.Data.Array (Array)
121import Streamly.Data.Stream (Stream)
121import Streamly.Data.Stream (Stream)
122−import Streamly.Data.Stream.Concurrent (eager)
122+import Streamly.Data.Stream.Prelude (eager)
123
123
124import qualified Data.List.NonEmpty as NonEmpty
124import qualified Data.List.NonEmpty as NonEmpty
125import qualified Streamly.Data.Array as A (fromList)
125import qualified Streamly.Data.Array as A (fromList)
126import qualified Streamly.Data.Fold as Fold
126import qualified Streamly.Data.Fold as Fold
127import qualified Streamly.Data.Stream as S
127import qualified Streamly.Data.Stream as S
128−import qualified Streamly.Data.Stream.Concurrent as S
128+import qualified Streamly.Data.Stream.Prelude as S
129import qualified Streamly.Unicode.Stream as U
129import qualified Streamly.Unicode.Stream as U
130import qualified Streamly.Internal.Unicode.Utf8 as UTF8 (pack, toArray)
130import qualified Streamly.Internal.Unicode.Utf8 as UTF8 (pack, toArray)
131import qualified Streamly.Internal.Data.Array as A (read)
131import qualified Streamly.Internal.Data.Array as A (read)
streamly.cabal+4−7
@@ -375,10 +375,8 @@ library
375 , Streamly.Internal.Data.Unfold.Prelude
375 , Streamly.Internal.Data.Unfold.Prelude
376 , Streamly.Internal.Data.Fold.Prelude
376 , Streamly.Internal.Data.Fold.Prelude
377
377
378− , Streamly.Internal.Data.Stream.Concurrent
378+ , Streamly.Internal.Data.Stream.Prelude
379 , Streamly.Internal.Data.Stream.Zip.Concurrent
379 , Streamly.Internal.Data.Stream.Zip.Concurrent
380− , Streamly.Internal.Data.Stream.Time
381− , Streamly.Internal.Data.Stream.Lifted
382
380
383 -- streamly-unicode (depends on unicode-data)
381 -- streamly-unicode (depends on unicode-data)
384 , Streamly.Internal.Unicode.Utf8
382 , Streamly.Internal.Unicode.Utf8
@@ -446,10 +444,6 @@ library
446 , Streamly.Internal.Data.Channel.Dispatcher
444 , Streamly.Internal.Data.Channel.Dispatcher
447 , Streamly.Internal.Data.Channel.Worker
445 , Streamly.Internal.Data.Channel.Worker
448
446
449− , Streamly.Data.Stream.Exception
450− , Streamly.Data.Stream.Concurrent
451− , Streamly.Data.Stream.Time
452−
453 , Streamly.Internal.Data.Stream.Concurrent.Channel.Type
447 , Streamly.Internal.Data.Stream.Concurrent.Channel.Type
454 , Streamly.Internal.Data.Stream.Concurrent.Channel.Dispatcher
448 , Streamly.Internal.Data.Stream.Concurrent.Channel.Dispatcher
455 , Streamly.Internal.Data.Stream.Concurrent.Channel.Consumer
449 , Streamly.Internal.Data.Stream.Concurrent.Channel.Consumer
@@ -457,6 +451,9 @@ library
457 , Streamly.Internal.Data.Stream.Concurrent.Channel.Interleave
451 , Streamly.Internal.Data.Stream.Concurrent.Channel.Interleave
458 , Streamly.Internal.Data.Stream.Concurrent.Channel.Operations
452 , Streamly.Internal.Data.Stream.Concurrent.Channel.Operations
459 , Streamly.Internal.Data.Stream.Concurrent.Channel
453 , Streamly.Internal.Data.Stream.Concurrent.Channel
454+ , Streamly.Internal.Data.Stream.Concurrent
455+ , Streamly.Internal.Data.Stream.Time
456+ , Streamly.Internal.Data.Stream.Lifted
460
457
461 , Streamly.Internal.Data.Fold.Async
458 , Streamly.Internal.Data.Fold.Async
462 , Streamly.Internal.Data.Fold.Concurrent.Channel.Type
459 , Streamly.Internal.Data.Fold.Concurrent.Channel.Type
test/Streamly/Test/Data/Stream/Concurrent.hs+1−1
@@ -26,7 +26,7 @@ import Test.Hspec as H
26import qualified Streamly.Data.Fold as Fold ( toList )
26import qualified Streamly.Data.Fold as Fold ( toList )
27import qualified Streamly.Data.Stream as Stream
27import qualified Streamly.Data.Stream as Stream
28 ( replicate, fromEffect, fromPure, fromList, fold, take, nil )
28 ( replicate, fromEffect, fromPure, fromList, fold, take, nil )
29−import qualified Streamly.Internal.Data.Stream.Concurrent as Async
29+import qualified Streamly.Internal.Data.Stream.Prelude as Async
30
30
31import Streamly.Test.Common (listEquals)
31import Streamly.Test.Common (listEquals)
32
32
test/Streamly/Test/FileSystem/Event/Common.hs+1−1
@@ -67,7 +67,7 @@ import System.IO.Temp (withSystemTempDirectory)
67import qualified Data.List.NonEmpty as NonEmpty
67import qualified Data.List.NonEmpty as NonEmpty
68import qualified Streamly.Internal.Data.Array as Array
68import qualified Streamly.Internal.Data.Array as Array
69import qualified Streamly.Internal.Data.Stream as Stream
69import qualified Streamly.Internal.Data.Stream as Stream
70−import qualified Streamly.Internal.Data.Stream.Concurrent as Stream
70+import qualified Streamly.Internal.Data.Stream.Prelude as Stream
71import qualified Streamly.Unicode.Stream as Unicode
71import qualified Streamly.Unicode.Stream as Unicode
72
72
73#if defined(FILESYSTEM_EVENT_LINUX)
73#if defined(FILESYSTEM_EVENT_LINUX)