@@ -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