@@ -65,8 +65,8 @@ module Streamly.Internal.Data.Array.Storable.Foreign
65 -- * Elimination
65 -- * Elimination
67 , A.toList
67 , A.toList
68− , toStream
68+ , A.toStream
69− , toStreamRev
69+ , A.toStreamRev
71 , ReadUState (..)
71 , ReadUState (..)
72 , unsafeRead
72 , unsafeRead
@@ -160,7 +160,6 @@ import GHC.IO (IO(..))
160import Streamly.Internal.Data.Array.Storable.Foreign.Types (Array(..), length)
160import Streamly.Internal.Data.Array.Storable.Foreign.Types (Array(..), length)
161import Streamly.Internal.Data.Fold.Types (Fold(..))
161import Streamly.Internal.Data.Fold.Types (Fold(..))
162import Streamly.Internal.Data.Stream.Serial (SerialT)
162import Streamly.Internal.Data.Stream.Serial (SerialT)
163−import Streamly.Internal.Data.Stream.StreamK.Type (IsStream)
164import Streamly.Internal.Data.Tuple.Strict (Tuple3'(..))
163import Streamly.Internal.Data.Tuple.Strict (Tuple3'(..))
165import Streamly.Internal.Data.Unfold.Types (Unfold(..))
164import Streamly.Internal.Data.Unfold.Types (Unfold(..))
@@ -170,7 +169,6 @@ import qualified Streamly.Internal.Data.Fold as FL
170import qualified Streamly.Internal.Data.Stream.Prelude as P
169import qualified Streamly.Internal.Data.Stream.Prelude as P
171import qualified Streamly.Internal.Data.Stream.Serial as Serial
170import qualified Streamly.Internal.Data.Stream.Serial as Serial
172import qualified Streamly.Internal.Data.Stream.StreamD as D
171import qualified Streamly.Internal.Data.Stream.StreamD as D
173−import qualified Streamly.Internal.Data.Stream.StreamK as K
174import qualified Streamly.Memory.Ring as RB
172import qualified Streamly.Memory.Ring as RB
176-------------------------------------------------------------------------------
174-------------------------------------------------------------------------------
@@ -206,26 +204,6 @@ fromStream = P.foldOnce A.write
206-- Elimination
204-- Elimination
207-------------------------------------------------------------------------------
205-------------------------------------------------------------------------------
209−-- | Convert an 'Array' into a stream.
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 #-}
219−-- | Convert an 'Array' into a stream in reverse order.
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 #-}
229data ReadUState a = ReadUState
207data ReadUState a = ReadUState
230 {-# UNPACK #-} !(ForeignPtr a) -- foreign ptr with end of array pointer
208 {-# UNPACK #-} !(ForeignPtr a) -- foreign ptr with end of array pointer
231 {-# UNPACK #-} !(Ptr a) -- current pointer
209 {-# UNPACK #-} !(Ptr a) -- current pointer
@@ -530,7 +508,7 @@ streamTransform :: forall m a b. (MonadIO m, Storable a, Storable b)
530 => (SerialT m a -> SerialT m b) -> Array a -> m (Array b)
508 => (SerialT m a -> SerialT m b) -> Array a -> m (Array b)
531streamTransform f arr =
509streamTransform f arr =
532 P.foldOnce (A.toArrayMinChunk (alignment (undefined :: a)) (length arr))
510 P.foldOnce (A.toArrayMinChunk (alignment (undefined :: a)) (length arr))
533− $ f (toStream arr)
511+ $ f (A.toStream arr)
535-------------------------------------------------------------------------------
513-------------------------------------------------------------------------------
@@ -603,11 +581,11 @@ asCString arr act = do
603-- /Internal/
581-- /Internal/
604{-# INLINE fold #-}
582{-# INLINE fold #-}
605fold :: forall m a b. (MonadIO m, Storable a) => Fold m a b -> Array a -> m b
583fold :: 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)
608-- | Fold an array using a stream fold operation.
586-- | Fold an array using a stream fold operation.
610-- /Internal/
588-- /Internal/
611{-# INLINE streamFold #-}
589{-# INLINE streamFold #-}
612streamFold :: (MonadIO m, Storable a) => (SerialT m a -> m b) -> Array a -> m b
590streamFold :: (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)