@@ -132,6 +132,7 @@ module Streamly.Mem.Array
134import Control.Monad.IO.Class (MonadIO(..))
134import Control.Monad.IO.Class (MonadIO(..))
135+import Data.Functor.Identity
135import Foreign.ForeignPtr (withForeignPtr)
136import Foreign.ForeignPtr (withForeignPtr)
136import Foreign.Ptr (minusPtr, plusPtr, castPtr)
137import Foreign.Ptr (minusPtr, plusPtr, castPtr)
137import Foreign.Storable (Storable(..))
138import Foreign.Storable (Storable(..))
@@ -140,6 +141,7 @@ import Prelude hiding (length, null, last, map, (!!), read)
140import Streamly.Mem.Array.Types hiding (flattenArrays, newArray)
141import Streamly.Mem.Array.Types hiding (flattenArrays, newArray)
141import Streamly.Streams.Serial (SerialT)
142import Streamly.Streams.Serial (SerialT)
142import Streamly.Streams.StreamK.Type (IsStream)
143import Streamly.Streams.StreamK.Type (IsStream)
144+import Streamly.Fold (Fold, lchunksOf, toStream)
144import qualified Streamly.Mem.Array.Types as A
146import qualified Streamly.Mem.Array.Types as A
145import qualified Streamly.Prelude as S
147import qualified Streamly.Prelude as S
@@ -170,16 +172,6 @@ writeN n m = fromStreamDN n $ D.toStreamD m
170-- Elimination
172-- Elimination
171-------------------------------------------------------------------------------
173-------------------------------------------------------------------------------
173−-- | Convert an 'Array' into a stream.
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 #-}
183-- | Convert an 'Array' into a stream in reverse order.
175-- | Convert an 'Array' into a stream in reverse order.
185-- @since 0.7.0
177-- @since 0.7.0
@@ -361,6 +353,12 @@ writeSliceRev arr i len s = undefined
361-- Streams of Arrays
353-- Streams of Arrays
362-------------------------------------------------------------------------------
354-------------------------------------------------------------------------------
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
364-- | Convert a stream of arrays into a stream of their elements.
362-- | Convert a stream of arrays into a stream of their elements.
366-- @since 0.7.0
364-- @since 0.7.0