module VectorExtras.Generic.Mutable where import Data.Vector.Generic.Mutable hiding (forM_) import VectorExtras.Prelude {-# INLINE writeListInReverseOrderStartingFrom #-} writeListInReverseOrderStartingFrom :: MVector v a => v s a -> Int -> [a] -> ST s () writeListInReverseOrderStartingFrom :: v s a -> Int -> [a] -> ST s () writeListInReverseOrderStartingFrom v s a v = let loop :: Int -> [a] -> ST s () loop !Int index = \case a value : [a] tail -> do v (PrimState (ST s)) a -> Int -> a -> ST s () forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () unsafeWrite v s a v (PrimState (ST s)) a v Int index a value Int -> [a] -> ST s () loop (Int -> Int forall a. Enum a => a -> a pred Int index) [a] tail [a] _ -> () -> ST s () forall (m :: * -> *) a. Monad m => a -> m a return () in Int -> [a] -> ST s () loop {-# INLINE writeAssocList #-} writeAssocList :: MVector v a => v s a -> [(Int, a)] -> ST s () writeAssocList :: v s a -> [(Int, a)] -> ST s () writeAssocList v s a v = ((Int, a) -> ST s ()) -> [(Int, a)] -> ST s () forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => (a -> f b) -> t a -> f () traverse_ (((Int, a) -> ST s ()) -> [(Int, a)] -> ST s ()) -> ((Int, a) -> ST s ()) -> [(Int, a)] -> ST s () forall a b. (a -> b) -> a -> b $ \(Int i, a value) -> v (PrimState (ST s)) a -> Int -> a -> ST s () forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () unsafeWrite v s a v (PrimState (ST s)) a v Int i a value