| Copyright | (c) Roman Leshchinskiy 2008-2010 Alexey Kuleshevich 2020-2022 Aleksey Khudyakov 2020-2022 Andrew Lelechenko 2020-2022  | 
|---|---|
| License | BSD-style | 
| Maintainer | Haskell Libraries Team <libraries@haskell.org> | 
| Stability | experimental | 
| Portability | non-portable | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Data.Vector.Generic.New
Description
Purely functional interface to initialisation of mutable vectors
Synopsis
- data New v a = New (forall s. ST s (Mutable v s a))
 - create :: (forall s. ST s (Mutable v s a)) -> New v a
 - run :: New v a -> ST s (Mutable v s a)
 - runPrim :: PrimMonad m => New v a -> m (Mutable v (PrimState m) a)
 - apply :: (forall s. Mutable v s a -> Mutable v s a) -> New v a -> New v a
 - modify :: (forall s. Mutable v s a -> ST s ()) -> New v a -> New v a
 - modifyWithBundle :: (forall s. Mutable v s a -> Bundle u b -> ST s ()) -> New v a -> Bundle u b -> New v a
 - unstream :: Vector v a => Bundle v a -> New v a
 - transform :: Vector v a => (forall m. Monad m => Stream m a -> Stream m a) -> (Size -> Size) -> New v a -> New v a
 - unstreamR :: Vector v a => Bundle v a -> New v a
 - transformR :: Vector v a => (forall m. Monad m => Stream m a -> Stream m a) -> (Size -> Size) -> New v a -> New v a
 - slice :: Vector v a => Int -> Int -> New v a -> New v a
 - init :: Vector v a => New v a -> New v a
 - tail :: Vector v a => New v a -> New v a
 - take :: Vector v a => Int -> New v a -> New v a
 - drop :: Vector v a => Int -> New v a -> New v a
 - unsafeSlice :: Vector v a => Int -> Int -> New v a -> New v a
 - unsafeInit :: Vector v a => New v a -> New v a
 - unsafeTail :: Vector v a => New v a -> New v a
 
Array recycling primitives
This data type is a wrapper around a monadic action which produces a mutable vector. It's used by a number of rewrite rules in order to facilitate the reuse of buffers allocated for vectors. See "Recycle your arrays!" for a detailed explanation.
Note that this data type must be declared as data and not newtype
 since it's used for rewrite rules and rules won't fire with newtype.
modifyWithBundle :: (forall s. Mutable v s a -> Bundle u b -> ST s ()) -> New v a -> Bundle u b -> New v a Source #
transform :: Vector v a => (forall m. Monad m => Stream m a -> Stream m a) -> (Size -> Size) -> New v a -> New v a Source #
transformR :: Vector v a => (forall m. Monad m => Stream m a -> Stream m a) -> (Size -> Size) -> New v a -> New v a Source #
References
- Leshchinskiy, Roman. "Recycle your arrays!". Practical Aspects of Declarative Languages: 11th International Symposium, PADL 2009, Savannah, GA, USA, January 19-20, 2009. Proceedings 11. Springer Berlin Heidelberg, 2009.