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 :: forall (v :: * -> * -> *) a s. MVector v a => 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 forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () unsafeWrite v s a v Int index a value Int -> [a] -> ST s () loop (forall a. Enum a => a -> a pred Int index) [a] tail [a] _ -> 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 :: forall (v :: * -> * -> *) a s. MVector v a => v s a -> [(Int, a)] -> ST s () writeAssocList v s a v = forall (t :: * -> *) (f :: * -> *) a b. (Foldable t, Applicative f) => (a -> f b) -> t a -> f () traverse_ forall a b. (a -> b) -> a -> b $ \(Int i, a value) -> forall (m :: * -> *) (v :: * -> * -> *) a. (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () unsafeWrite v s a v Int i a value