on master help sign in
Fix module dependencies due to Stream.Prelude
commit7ce1771a280187fd37bccc00d7e364c0e53a0b67 authorHarendra Kumar <harendra@composewell.com> dateSun 17 Jan 2021, 14:10 (6 years ago) parent7b2b463
8 files changed+48−44
benchmark/Streamly/Benchmark/Data/Stream/StreamK.hs+8−3 src/Streamly/Internal/Data/Array/Storable/Foreign.hs+5−27 src/Streamly/Internal/Data/Array/Storable/Foreign/Types.hs+23 src/Streamly/Internal/Data/List.hs+7−7 src/Streamly/Internal/Data/Stream/IsStream.hs+1−2 src/Streamly/Internal/Data/Stream/IsStream/Eliminate.hs+1−1 src/Streamly/Internal/Data/Stream/IsStream/Nesting.hs+1−1 src/Streamly/Internal/Memory/ArrayStream.hs+2−3
benchmark/Streamly/Benchmark/Data/Stream/StreamK.hs+8−3
@@ -30,7 +30,6 @@ import qualified Prelude as P
3030import qualified Data.List as List
3131
3232import qualified Streamly.Internal.Data.Stream.StreamK as S
33−import qualified Streamly.Internal.Data.Stream.Prelude as SP
3433import qualified Streamly.Internal.Data.SVar as S
3534
3635import Gauge (bench, nfIO, bgroup, Benchmark, defaultMain)
@@ -119,13 +118,19 @@ sourceFromFoldableM :: S.MonadAsync m => Int -> Stream m Int
119118sourceFromFoldableM n =
120119 Prelude.foldr S.consM S.nil (Prelude.fmap return [n..n+value])
121120
121+{-# INLINABLE concatMapFoldableWith #-}
122+concatMapFoldableWith :: (S.IsStream t, Foldable f)
123+ => (t m b -> t m b -> t m b) -> (a -> t m b) -> f a -> t m b
124+concatMapFoldableWith f g = Prelude.foldr (f . g) S.nil
125+
122126{-# INLINE sourceFoldMapWith #-}
123127sourceFoldMapWith :: Int -> Stream m Int
124−sourceFoldMapWith n = SP.concatMapFoldableWith S.serial S.yield [n..n+value]
128+sourceFoldMapWith n = concatMapFoldableWith S.serial S.yield [n..n+value]
125129
126130{-# INLINE sourceFoldMapWithM #-}
127131sourceFoldMapWithM :: Monad m => Int -> Stream m Int
128−sourceFoldMapWithM n = SP.concatMapFoldableWith S.serial (S.yieldM . return) [n..n+value]
132+sourceFoldMapWithM n =
133+ concatMapFoldableWith S.serial (S.yieldM . return) [n..n+value]
129134
130135-------------------------------------------------------------------------------
131136-- Elimination
src/Streamly/Internal/Data/Array/Storable/Foreign.hs+5−27
@@ -65,8 +65,8 @@ module Streamly.Internal.Data.Array.Storable.Foreign
6565 -- * Elimination
6666
6767 , A.toList
68− , toStream
69− , toStreamRev
68+ , A.toStream
69+ , A.toStreamRev
7070 , read
7171 , ReadUState (..)
7272 , unsafeRead
@@ -160,7 +160,6 @@ import GHC.IO (IO(..))
160160import Streamly.Internal.Data.Array.Storable.Foreign.Types (Array(..), length)
161161import Streamly.Internal.Data.Fold.Types (Fold(..))
162162import Streamly.Internal.Data.Stream.Serial (SerialT)
163−import Streamly.Internal.Data.Stream.StreamK.Type (IsStream)
164163import Streamly.Internal.Data.Tuple.Strict (Tuple3'(..))
165164import Streamly.Internal.Data.Unfold.Types (Unfold(..))
166165
@@ -170,7 +169,6 @@ import qualified Streamly.Internal.Data.Fold as FL
170169import qualified Streamly.Internal.Data.Stream.Prelude as P
171170import qualified Streamly.Internal.Data.Stream.Serial as Serial
172171import qualified Streamly.Internal.Data.Stream.StreamD as D
173−import qualified Streamly.Internal.Data.Stream.StreamK as K
174172import qualified Streamly.Memory.Ring as RB
175173
176174-------------------------------------------------------------------------------
@@ -206,26 +204,6 @@ fromStream = P.foldOnce A.write
206204-- Elimination
207205-------------------------------------------------------------------------------
208206
209−-- | Convert an 'Array' into a stream.
210−--
211−-- /Internal/
212−{-# INLINE_EARLY toStream #-}
213−toStream :: (Monad m, K.IsStream t, Storable a) => Array a -> t m a
214−toStream = D.fromStreamD . A.toStreamD
215−-- XXX add fallback to StreamK rule
216−-- {-# RULES "Streamly.Array.read fallback to StreamK" [1]
217−-- forall a. S.readK (read a) = K.fromArray a #-}
218−
219−-- | Convert an 'Array' into a stream in reverse order.
220−--
221−-- /Internal/
222−{-# INLINE_EARLY toStreamRev #-}
223−toStreamRev :: (Monad m, IsStream t, Storable a) => Array a -> t m a
224−toStreamRev = D.fromStreamD . A.toStreamDRev
225−-- XXX add fallback to StreamK rule
226−-- {-# RULES "Streamly.Array.readRev fallback to StreamK" [1]
227−-- forall a. S.toStreamK (readRev a) = K.revFromArray a #-}
228−
229207data ReadUState a = ReadUState
230208 {-# UNPACK #-} !(ForeignPtr a) -- foreign ptr with end of array pointer
231209 {-# UNPACK #-} !(Ptr a) -- current pointer
@@ -530,7 +508,7 @@ streamTransform :: forall m a b. (MonadIO m, Storable a, Storable b)
530508 => (SerialT m a -> SerialT m b) -> Array a -> m (Array b)
531509streamTransform f arr =
532510 P.foldOnce (A.toArrayMinChunk (alignment (undefined :: a)) (length arr))
533− $ f (toStream arr)
511+ $ f (A.toStream arr)
534512
535513-------------------------------------------------------------------------------
536514-- Casts
@@ -603,11 +581,11 @@ asCString arr act = do
603581-- /Internal/
604582{-# INLINE fold #-}
605583fold :: forall m a b. (MonadIO m, Storable a) => Fold m a b -> Array a -> m b
606−fold f arr = P.foldOnce f (toStream arr :: Serial.SerialT m a)
584+fold f arr = P.foldOnce f (A.toStream arr :: Serial.SerialT m a)
607585
608586-- | Fold an array using a stream fold operation.
609587--
610588-- /Internal/
611589{-# INLINE streamFold #-}
612590streamFold :: (MonadIO m, Storable a) => (SerialT m a -> m b) -> Array a -> m b
613−streamFold f arr = f (toStream arr)
591+streamFold f arr = f (A.toStream arr)
src/Streamly/Internal/Data/Array/Storable/Foreign/Types.hs+23
@@ -56,6 +56,8 @@ module Streamly.Internal.Data.Array.Storable.Foreign.Types
5656 , toStreamDRev
5757 , toStreamK
5858 , toStreamKRev
59+ , toStream
60+ , toStreamRev
5961 , toList
6062
6163 , unlines
@@ -461,6 +463,27 @@ toStreamDRev arr = MA.toStreamDRev (unsafeThaw arr)
461463toStreamKRev :: forall t m a. (K.IsStream t, Storable a) => Array a -> t m a
462464toStreamKRev arr = MA.toStreamKRev (unsafeThaw arr)
463465
466+-- | Convert an 'Array' into a stream.
467+--
468+-- /Internal/
469+{-# INLINE_EARLY toStream #-}
470+toStream :: (Monad m, K.IsStream t, Storable a) => Array a -> t m a
471+toStream = D.fromStreamD . toStreamD
472+-- XXX add fallback to StreamK rule
473+-- {-# RULES "Streamly.Array.read fallback to StreamK" [1]
474+-- forall a. S.readK (read a) = K.fromArray a #-}
475+
476+-- | Convert an 'Array' into a stream in reverse order.
477+--
478+-- /Internal/
479+{-# INLINE_EARLY toStreamRev #-}
480+toStreamRev :: (Monad m, K.IsStream t, Storable a) => Array a -> t m a
481+toStreamRev = D.fromStreamD . toStreamDRev
482+
483+-- XXX add fallback to StreamK rule
484+-- {-# RULES "Streamly.Array.readRev fallback to StreamK" [1]
485+-- forall a. S.toStreamK (readRev a) = K.revFromArray a #-}
486+
464487{-# INLINE_NORMAL foldl' #-}
465488foldl' :: forall a b. Storable a => (b -> a -> b) -> b -> Array a -> b
466489foldl' f z arr = MA.foldl' f z (unsafeThaw arr)
src/Streamly/Internal/Data/List.hs+7−7
@@ -75,7 +75,7 @@ import GHC.Exts (IsList(..), IsString(..))
7575import Streamly.Internal.Data.Stream.Serial (SerialT)
7676import Streamly.Internal.Data.Stream.Zip (ZipSerialM)
7777
78−import qualified Streamly.Internal.Data.Stream.Prelude as P
78+import qualified Streamly.Internal.Data.Stream.IsStream as Stream
7979import qualified Streamly.Internal.Data.Stream.StreamK as K
8080
8181-- We implement list as a newtype instead of a type synonym to make type
@@ -103,15 +103,15 @@ newtype List a = List { toSerial :: SerialT Identity a }
103103
104104instance (a ~ Char) => IsString (List a) where
105105 {-# INLINE fromString #-}
106− fromString = List . P.fromList
106+ fromString = List . Stream.fromList
107107
108108-- GHC versions 8.0 and below cannot derive IsList
109109instance IsList (List a) where
110110 type (Item (List a)) = a
111111 {-# INLINE fromList #-}
112− fromList = List . P.fromList
112+ fromList = List . Stream.fromList
113113 {-# INLINE toList #-}
114− toList = runIdentity . P.toList . toSerial
114+ toList = runIdentity . Stream.toList . toSerial
115115
116116------------------------------------------------------------------------------
117117-- Patterns
@@ -165,15 +165,15 @@ newtype ZipList a = ZipList { toZipSerial :: ZipSerialM Identity a }
165165
166166instance (a ~ Char) => IsString (ZipList a) where
167167 {-# INLINE fromString #-}
168− fromString = ZipList . P.fromList
168+ fromString = ZipList . Stream.fromList
169169
170170-- GHC versions 8.0 and below cannot derive IsList
171171instance IsList (ZipList a) where
172172 type (Item (ZipList a)) = a
173173 {-# INLINE fromList #-}
174− fromList = ZipList . P.fromList
174+ fromList = ZipList . Stream.fromList
175175 {-# INLINE toList #-}
176− toList = runIdentity . P.toList . toZipSerial
176+ toList = runIdentity . Stream.toList . K.adapt . toZipSerial
177177
178178-- | Convert a 'ZipList' to a regular 'List'
179179--
src/Streamly/Internal/Data/Stream/IsStream.hs+1−2
@@ -102,7 +102,7 @@ module Streamly.Internal.Data.Stream.IsStream
102102 , K.mfix
103103
104104 -- ** From Containers
105− , P.fromList
105+ , fromList
106106 , fromListM
107107 , K.fromFoldable
108108 , fromFoldableM
@@ -592,7 +592,6 @@ module Streamly.Internal.Data.Stream.IsStream
592592where
593593
594594import qualified Streamly.Internal.Data.Stream.Parallel as Par
595−import qualified Streamly.Internal.Data.Stream.Prelude as P
596595import qualified Streamly.Internal.Data.Stream.StreamD as D
597596import qualified Streamly.Internal.Data.Stream.StreamK as K
598597import qualified Streamly.Internal.Data.Stream.Serial as Serial
src/Streamly/Internal/Data/Stream/IsStream/Eliminate.hs+1−1
@@ -162,7 +162,7 @@ import Streamly.Internal.Data.Stream.StreamD (fromStreamD, toStreamD)
162162import Streamly.Internal.Data.Stream.StreamK (IsStream)
163163import Streamly.Internal.Data.Stream.Serial (SerialT)
164164
165−import qualified Streamly.Internal.Data.Array.Storable.Foreign as A
165+import qualified Streamly.Internal.Data.Array.Storable.Foreign.Types as A
166166import qualified Streamly.Internal.Data.Fold as FL
167167import qualified Streamly.Internal.Data.Stream.Prelude as P
168168import qualified Streamly.Internal.Data.Stream.StreamD as D
src/Streamly/Internal/Data/Stream/IsStream/Nesting.hs+1−1
@@ -255,7 +255,7 @@ import Streamly.Internal.Data.Tuple.Strict (Tuple'(..))
255255
256256import qualified Data.Heap as H
257257import qualified Data.Map.Strict as Map
258−import qualified Streamly.Internal.Data.Array.Storable.Foreign as A
258+import qualified Streamly.Internal.Data.Array.Storable.Foreign.Types as A
259259import qualified Streamly.Internal.Data.Fold as FL
260260import qualified Streamly.Internal.Data.Parser.ParserK.Types as PRK
261261import qualified Streamly.Internal.Data.Parser.ParserD as PRD
src/Streamly/Internal/Memory/ArrayStream.hs+2−3
@@ -50,7 +50,6 @@ import qualified Streamly.Internal.Data.Array.Storable.Foreign.Types as A
5050import qualified Streamly.Internal.Data.Array.Storable.Foreign.Mut.Types as MA
5151import qualified Streamly.Internal.Data.Stream.IsStream as S
5252import qualified Streamly.Internal.Data.Stream.StreamD as D
53−import qualified Streamly.Internal.Data.Stream.Prelude as P
5453
5554-- XXX efficiently compare two streams of arrays. Two streams can have chunks
5655-- of different sizes, we can handle that in the stream comparison abstraction.
@@ -174,7 +173,7 @@ spliceArraysLenUnsafe len buffered = do
174173_spliceArrays :: (MonadIO m, Storable a)
175174 => SerialT m (Array a) -> m (Array a)
176175_spliceArrays s = do
177− buffered <- P.foldr S.cons S.nil s
176+ buffered <- S.foldr S.cons S.nil s
178177 len <- S.sum (S.map length buffered)
179178 arr <- liftIO $ MA.newArray len
180179 end <- S.foldlM' writeArr (return $ MA.aEnd arr) s
@@ -192,7 +191,7 @@ _spliceArrays s = do
192191_spliceArraysBuffered :: (MonadIO m, Storable a)
193192 => SerialT m (Array a) -> m (Array a)
194193_spliceArraysBuffered s = do
195− buffered <- P.foldr S.cons S.nil s
194+ buffered <- S.foldr S.cons S.nil s
196195 len <- S.sum (S.map length buffered)
197196 A.unsafeFreeze <$> spliceArraysLenUnsafe len (S.map A.unsafeThaw s)
198197