@@ -132,6 +132,7 @@ module Streamly.Mem.Array
132132where
133133
134134import Control.Monad.IO.Class (MonadIO(..))
135+import Data.Functor.Identity
135136import Foreign.ForeignPtr (withForeignPtr)
136137import Foreign.Ptr (minusPtr, plusPtr, castPtr)
137138import Foreign.Storable (Storable(..))
@@ -140,6 +141,7 @@ import Prelude hiding (length, null, last, map, (!!), read)
140141import Streamly.Mem.Array.Types hiding (flattenArrays, newArray)
141142import Streamly.Streams.Serial (SerialT)
142143import Streamly.Streams.StreamK.Type (IsStream)
144+import Streamly.Fold (Fold, lchunksOf, toStream)
143145
144146import qualified Streamly.Mem.Array.Types as A
145147import qualified Streamly.Prelude as S
@@ -170,16 +172,6 @@ writeN n m = fromStreamDN n $ D.toStreamD m
170172-- Elimination
171173-------------------------------------------------------------------------------
172174
173−-- | Convert an 'Array' into a stream.
174−--
175−-- @since 0.7.0
176−{-# INLINE_EARLY read #-}
177−read :: (Monad m, IsStream t, Storable a) => Array a -> t m a
178−read = D.fromStreamD . toStreamD
179−-- XXX add fallback to StreamK rule
180−-- {-# RULES "Streamly.Array.read fallback to StreamK" [1]
181−-- forall a. S.readK (read a) = K.fromArray a #-}
182−
183175-- | Convert an 'Array' into a stream in reverse order.
184176--
185177-- @since 0.7.0
@@ -361,6 +353,12 @@ writeSliceRev arr i len s = undefined
361353-- Streams of Arrays
362354-------------------------------------------------------------------------------
363355
356+-- | Fold the input to a pure buffered stream (List) of arrays.
357+{-# INLINE _toArrays #-}
358+_toArrays :: (MonadIO m, Storable a)
359+ => Int -> Fold m a (SerialT Identity (Array a))
360+_toArrays n = lchunksOf n (toArrayN n) toStream
361+
364362-- | Convert a stream of arrays into a stream of their elements.
365363--
366364-- @since 0.7.0