Skip to content
Snippets Groups Projects
Commit 0b6a11a5 authored by meooow's avatar meooow Committed by Lei Zhu
Browse files

Add Data.MArray.{modifyArray,modifyArray'}

parent 4053f7cf
No related branches found
No related tags found
1 merge request!18Add Data.MArray.{modifyArray,modifyArray'}
......@@ -922,6 +922,31 @@ writeArray marr i e = do
n <- getNumElements marr
unsafeWrite marr (safeIndex (l,u) n i) e
{-# INLINE modifyArray #-}
-- | Modify an element in a mutable array
--
-- @since FIXME
modifyArray :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m ()
modifyArray marr i f = do
(l,u) <- getBounds marr
n <- getNumElements marr
let idx = safeIndex (l,u) n i
x <- unsafeRead marr idx
unsafeWrite marr idx (f x)
{-# INLINE modifyArray' #-}
-- | Modify an element in a mutable array. Strict in the written element.
--
-- @since FIXME
modifyArray' :: (MArray a e m, Ix i) => a i e -> i -> (e -> e) -> m ()
modifyArray' marr i f = do
(l,u) <- getBounds marr
n <- getNumElements marr
let idx = safeIndex (l,u) n i
x <- unsafeRead marr idx
let !x' = f x
unsafeWrite marr idx x'
{-# INLINE getElems #-}
-- | Return a list of all the elements of a mutable array
getElems :: (MArray a e m, Ix i) => a i e -> m [e]
......
......@@ -31,6 +31,8 @@ module Data.Array.MArray (
-- * Reading and writing mutable arrays
readArray, -- :: (MArray a e m, Ix i) => a i e -> i -> m e
writeArray, -- :: (MArray a e m, Ix i) => a i e -> i -> e -> m ()
modifyArray,
modifyArray',
-- * Derived arrays
mapArray, -- :: (MArray a e' m, MArray a e m, Ix i) => (e' -> e) -> a i e' -> m (a i e)
......
......@@ -9,6 +9,10 @@
* Add `Data.Array.IArray.(!?)`
* Add `Data.Array.MArray.modifyArray` and `Data.Array.MArray.modifyArray'`.
These are also exposed from `Data.Array.IO`, `Data.Array.ST`, and
`Data.Array.Storable`.
## 0.5.5.0 *February 2022*
* Compatibility with GHC's new JavaScript backend.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment