@@ -119,8 +119,8 @@ module Streamly.Internal.Data.Array.Mut.Type
119 , toStreamDRevWith
119 , toStreamDRevWith
120 , toStreamKWith
120 , toStreamKWith
121 , toStreamKRevWith
121 , toStreamKRevWith
122− , toStreamD
122+ , read
123− , toStreamDRev
123+ , readRev
124 , toStreamK
124 , toStreamK
125 , toStreamKRev
125 , toStreamKRev
@@ -526,6 +526,8 @@ putIndices arr = FL.foldlM' step (return ())
527-- | Modify a given index of an array using a modifier function.
527-- | Modify a given index of an array using a modifier function.
529+-- Unsafe because it does not check the bounds of the array.
529-- /Pre-release/
531-- /Pre-release/
530modifyIndexUnsafe :: forall m a b. (MonadIO m, Unbox a) =>
532modifyIndexUnsafe :: forall m a b. (MonadIO m, Unbox a) =>
531 Int -> MutArray a -> (a -> (a, b)) -> m b
533 Int -> MutArray a -> (a -> (a, b)) -> m b
@@ -552,7 +554,6 @@ modifyIndex i MutArray{..} f = do
552 return res
554 return res
553 else invalidIndex "modifyIndex" i
555 else invalidIndex "modifyIndex" i
556-- | Modify the array indices generated by the supplied stream.
557-- | Modify the array indices generated by the supplied stream.
558-- /Pre-release/
559-- /Pre-release/
@@ -571,6 +572,8 @@ modifyIndices arr f = FL.foldlM' step initial
572-- | Modify each element of an array using the supplied modifier function.
573-- | Modify each element of an array using the supplied modifier function.
575+-- This is an in-place equivalent of an immutable map operation.
574-- /Pre-release/
577-- /Pre-release/
575modify :: forall m a. (MonadIO m, Unbox a)
578modify :: forall m a. (MonadIO m, Unbox a)
576 => MutArray a -> (a -> a) -> m ()
579 => MutArray a -> (a -> a) -> m ()
@@ -1549,14 +1552,13 @@ toStreamDWith liftio MutArray{..} = D.Stream step arrStart
1549 r <- peekWith arrContents p
1552 r <- peekWith arrContents p
1550 return $ D.Yield r (INDEX_NEXT(p,a))
1553 return $ D.Yield r (INDEX_NEXT(p,a))
1552−-- | Use the 'reader' unfold instead.
1555+-- | Convert a 'MutArray' into a stream.
1554−-- @toStreamD = D.unfold reader@
1557+-- >>> read = Stream.unfold MutArray.reader
1556−-- We can try this if the unfold has any performance issues.
1557−{-# INLINE_NORMAL toStreamD #-}
1559+{-# INLINE_NORMAL read #-}
1558−toStreamD :: forall m a. (MonadIO m, Unbox a) => MutArray a -> D.Stream m a
1560+read :: forall m a. (MonadIO m, Unbox a) => MutArray a -> D.Stream m a
1559−toStreamD = toStreamDWith liftIO
1561+read = toStreamDWith liftIO
1561{-# INLINE toStreamKWith #-}
1563{-# INLINE toStreamKWith #-}
1562toStreamKWith ::
1564toStreamKWith ::
@@ -1591,14 +1593,13 @@ toStreamDRevWith liftio MutArray{..} =
1591 r <- peekWith arrContents p
1593 r <- peekWith arrContents p
1592 return $ D.Yield r (INDEX_PREV(p,a))
1594 return $ D.Yield r (INDEX_PREV(p,a))
1594−-- | Use the 'readerRev' unfold instead.
1596+-- | Convert a 'MutArray' into a stream in reverse order.
1596−-- @toStreamDRev = D.unfold readerRev@
1598+-- >>> readRev = Stream.unfold MutArray.readerRev
1598−-- We can try this if the unfold has any perf issues.
1599−{-# INLINE_NORMAL toStreamDRev #-}
1600+{-# INLINE_NORMAL readRev #-}
1600−toStreamDRev :: forall m a. (MonadIO m, Unbox a) => MutArray a -> D.Stream m a
1601+readRev :: forall m a. (MonadIO m, Unbox a) => MutArray a -> D.Stream m a
1601−toStreamDRev = toStreamDRevWith liftIO
1602+readRev = toStreamDRevWith liftIO
1603{-# INLINE toStreamKRevWith #-}
1604{-# INLINE toStreamKRevWith #-}
1604toStreamKRevWith ::
1605toStreamKRevWith ::
@@ -1629,12 +1630,12 @@ toStreamKRev = toStreamKRevWith liftIO
1629-- | Strict left fold of an array.
1630-- | Strict left fold of an array.
1630{-# INLINE_NORMAL foldl' #-}
1631{-# INLINE_NORMAL foldl' #-}
1631foldl' :: (MonadIO m, Unbox a) => (b -> a -> b) -> b -> MutArray a -> m b
1632foldl' :: (MonadIO m, Unbox a) => (b -> a -> b) -> b -> MutArray a -> m b
1632−foldl' f z arr = D.foldl' f z $ toStreamD arr
1633+foldl' f z arr = D.foldl' f z $ read arr
1634-- | Right fold of an array.
1635-- | Right fold of an array.
1635{-# INLINE_NORMAL foldr #-}
1636{-# INLINE_NORMAL foldr #-}
1636foldr :: (MonadIO m, Unbox a) => (a -> b -> b) -> b -> MutArray a -> m b
1637foldr :: (MonadIO m, Unbox a) => (a -> b -> b) -> b -> MutArray a -> m b
1637−foldr f z arr = D.foldr f z $ toStreamD arr
1638+foldr f z arr = D.foldr f z $ read arr
1639-------------------------------------------------------------------------------
1640-------------------------------------------------------------------------------