Skip to content

Commit aba6393

Browse files
committed
Add map for mutable vector which modify it in place.
1 parent 7ad0e10 commit aba6393

1 file changed

Lines changed: 35 additions & 0 deletions

File tree

vector/src/Data/Vector/Generic/Mutable.hs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ module Data.Vector.Generic.Mutable (
5858
ifoldr, ifoldr', ifoldrM, ifoldrM',
5959

6060
-- * Modifying vectors
61+
mapInPlace, imapInPlace, mapInPlaceM, imapInPlaceM,
6162
nextPermutation, nextPermutationBy,
6263
prevPermutation, prevPermutationBy,
6364

@@ -1215,6 +1216,40 @@ partitionWithUnknown f s
12151216
-- Modifying vectors
12161217
-- -----------------
12171218

1219+
-- | Modify vector in place by applying function to each element.
1220+
--
1221+
-- @since NEXT_VERSION
1222+
mapInPlace :: (PrimMonad m, MVector v a) => (a -> a) -> v (PrimState m) a -> m ()
1223+
{-# INLINE mapInPlace #-}
1224+
mapInPlace f v
1225+
= stToPrim
1226+
$ forI_ v $ \i -> unsafeWrite v i . f =<< unsafeRead v i
1227+
1228+
-- | Modify vector in place by applying function to each element and its index.
1229+
--
1230+
-- @since NEXT_VERSION
1231+
imapInPlace :: (PrimMonad m, MVector v a) => (Int -> a -> a) -> v (PrimState m) a -> m ()
1232+
{-# INLINE imapInPlace #-}
1233+
imapInPlace f v
1234+
= stToPrim
1235+
$ forI_ v $ \i -> unsafeWrite v i . f i =<< unsafeRead v i
1236+
1237+
-- | Modify vector in place by applying monadic function to each element in order.
1238+
--
1239+
-- @since NEXT_VERSION
1240+
mapInPlaceM :: (PrimMonad m, MVector v a) => (a -> m a) -> v (PrimState m) a -> m ()
1241+
{-# INLINE mapInPlaceM #-}
1242+
mapInPlaceM f v
1243+
= forI_ v $ \i -> unsafeWrite v i =<< f =<< unsafeRead v i
1244+
1245+
-- | Modify vector in place by applying monadic function to each element and its index in order.
1246+
--
1247+
-- @since NEXT_VERSION
1248+
imapInPlaceM :: (PrimMonad m, MVector v a) => (Int -> a -> m a) -> v (PrimState m) a -> m ()
1249+
{-# INLINE imapInPlaceM #-}
1250+
imapInPlaceM f v
1251+
= forI_ v $ \i -> unsafeWrite v i =<< f i =<< unsafeRead v i
1252+
12181253

12191254
-- | Compute the (lexicographically) next permutation of the given vector in-place.
12201255
-- Returns False when the input is the last item in the enumeration, i.e., if it is in

0 commit comments

Comments
 (0)