fixed-vector-2.0.0.0: Generic vectors with statically known size.
Safe HaskellNone
LanguageHaskell2010

Data.Vector.Fixed.Mutable

Description

Type classes for vectors which are implemented on top of the arrays and support in-place mutation. API is similar to one used in the vector package.

Synopsis

Mutable vectors

type Arity (n :: Nat) = ArityPeano (Peano n) Source #

Synonym for writing constrains using type level naturals.

type family Mutable (v :: Type -> Type) :: Type -> Type -> Type Source #

Mutable counterpart of fixed-length vector.

Instances

Instances details
type Mutable (Vec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Boxed

type Mutable (Vec n) = MVec n
type Mutable (Vec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Primitive

type Mutable (Vec n) = MVec n
type Mutable (Vec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Storable

type Mutable (Vec n) = MVec n
type Mutable (Vec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Strict

type Mutable (Vec n) = MVec n

type family DimM (v :: Type -> Type -> Type) :: PeanoNum Source #

Dimension for mutable vector.

Instances

Instances details
type DimM (MVec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Boxed

type DimM (MVec n) = Peano n
type DimM (MVec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Primitive

type DimM (MVec n) = Peano n
type DimM (MVec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Storable

type DimM (MVec n) = Peano n
type DimM (MVec n) Source # 
Instance details

Defined in Data.Vector.Fixed.Strict

type DimM (MVec n) = Peano n

class ArityPeano (DimM v) => MVector (v :: Type -> Type -> Type) a where Source #

Type class for mutable vectors.

Minimal complete definition

basicCopy, basicNew, basicUnsafeRead, basicUnsafeWrite

Methods

basicCopy Source #

Arguments

:: v s a

Target

-> v s a

Source

-> ST s () 

Copy vector. The two vectors may not overlap. Shouldn't be used directly, use copy instead.

basicNew :: ST s (v s a) Source #

Allocate new uninitialized vector. Shouldn't be used directly, use new instead.

basicReplicate :: a -> ST s (v s a) Source #

Allocate new vector initialized with given element. Shouldn't be used directly, use replicate instead.

basicClone :: v s a -> ST s (v s a) Source #

Create copy of existing vector. Shouldn't be used directly, use clone instead.

basicUnsafeRead :: v s a -> Int -> ST s a Source #

Read value at index without bound checks. Shouldn't be used directly, use unsafeRead instead.

basicUnsafeWrite :: v s a -> Int -> a -> ST s () Source #

Write value at index without bound checks. Shouldn't be used directly, use unsafeWrite instead.

Instances

Instances details
Arity n => MVector (MVec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Boxed

Methods

basicCopy :: MVec n s a -> MVec n s a -> ST s () Source #

basicNew :: ST s (MVec n s a) Source #

basicReplicate :: a -> ST s (MVec n s a) Source #

basicClone :: MVec n s a -> ST s (MVec n s a) Source #

basicUnsafeRead :: MVec n s a -> Int -> ST s a Source #

basicUnsafeWrite :: MVec n s a -> Int -> a -> ST s () Source #

(Arity n, Prim a) => MVector (MVec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Primitive

Methods

basicCopy :: MVec n s a -> MVec n s a -> ST s () Source #

basicNew :: ST s (MVec n s a) Source #

basicReplicate :: a -> ST s (MVec n s a) Source #

basicClone :: MVec n s a -> ST s (MVec n s a) Source #

basicUnsafeRead :: MVec n s a -> Int -> ST s a Source #

basicUnsafeWrite :: MVec n s a -> Int -> a -> ST s () Source #

(Arity n, Storable a) => MVector (MVec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Storable

Methods

basicCopy :: MVec n s a -> MVec n s a -> ST s () Source #

basicNew :: ST s (MVec n s a) Source #

basicReplicate :: a -> ST s (MVec n s a) Source #

basicClone :: MVec n s a -> ST s (MVec n s a) Source #

basicUnsafeRead :: MVec n s a -> Int -> ST s a Source #

basicUnsafeWrite :: MVec n s a -> Int -> a -> ST s () Source #

Arity n => MVector (MVec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Strict

Methods

basicCopy :: MVec n s a -> MVec n s a -> ST s () Source #

basicNew :: ST s (MVec n s a) Source #

basicReplicate :: a -> ST s (MVec n s a) Source #

basicClone :: MVec n s a -> ST s (MVec n s a) Source #

basicUnsafeRead :: MVec n s a -> Int -> ST s a Source #

basicUnsafeWrite :: MVec n s a -> Int -> a -> ST s () Source #

lengthM :: ArityPeano (DimM v) => v s a -> Int Source #

Length of mutable vector. Function doesn't evaluate its argument.

new :: (MVector v a, PrimMonad m) => m (v (PrimState m) a) Source #

Create new uninitialized mutable vector.

clone :: (PrimMonad m, MVector v a) => v (PrimState m) a -> m (v (PrimState m) a) Source #

Create copy of vector.

Examples:

>>> import Control.Monad.ST (runST)
>>> import Data.Vector.Fixed (mk3)
>>> import Data.Vector.Fixed.Boxed (Vec3)
>>> import qualified Data.Vector.Fixed.Mutable as M
>>> let x = runST (do { v <- M.replicate 100; v' <- clone v; M.write v' 0 2; M.unsafeFreeze v' }) :: Vec3 Int
>>> x
[2,100,100]

copy Source #

Arguments

:: (MVector v a, PrimMonad m) 
=> v (PrimState m) a

Target

-> v (PrimState m) a

Source

-> m () 

Copy vector. The two vectors may not overlap. Since vectors' length is encoded in the type there is no need in runtime checks of length.

read :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m a Source #

Read value at index with bound checks.

write :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m () Source #

Write value at index with bound checks.

unsafeRead :: (MVector v a, PrimMonad m) => v (PrimState m) a -> Int -> m a Source #

Read value at index without bound checks.

unsafeWrite :: (MVector v a, PrimMonad m) => v (PrimState m) a -> Int -> a -> m () Source #

Write value at index without bound checks.

Creation

replicate :: (PrimMonad m, MVector v a) => a -> m (v (PrimState m) a) Source #

Create new vector with all elements set to given value.

replicateM :: (PrimMonad m, MVector v a) => m a -> m (v (PrimState m) a) Source #

Create new vector with all elements are generated by provided monadic action.

generate :: (PrimMonad m, MVector v a) => (Int -> a) -> m (v (PrimState m) a) Source #

Create new vector with using function from index to value.

generateM :: (PrimMonad m, MVector v a) => (Int -> m a) -> m (v (PrimState m) a) Source #

Create new vector with using monadic function from index to value.

Loops

forI :: (PrimMonad m, MVector v a) => v (PrimState m) a -> (Int -> m ()) -> m () Source #

Loop which calls function for each index

Immutable vectors

class (Dim v ~ DimM (Mutable v), MVector (Mutable v) a) => IVector (v :: Type -> Type) a where Source #

Type class for immutable vectors

Methods

basicUnsafeFreeze :: Mutable v s a -> ST s (v a) Source #

Convert vector to immutable state. Mutable vector must not be modified afterwards.

basicThaw :: v a -> ST s (Mutable v s a) Source #

Convert immutable vector to mutable by copying it.

unsafeIndex :: v a -> Int -> a Source #

Get element at specified index without bounds check.

Instances

Instances details
Arity n => IVector (Vec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Boxed

Methods

basicUnsafeFreeze :: Mutable (Vec n) s a -> ST s (Vec n a) Source #

basicThaw :: Vec n a -> ST s (Mutable (Vec n) s a) Source #

unsafeIndex :: Vec n a -> Int -> a Source #

(Arity n, Prim a) => IVector (Vec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Primitive

Methods

basicUnsafeFreeze :: Mutable (Vec n) s a -> ST s (Vec n a) Source #

basicThaw :: Vec n a -> ST s (Mutable (Vec n) s a) Source #

unsafeIndex :: Vec n a -> Int -> a Source #

(Arity n, Storable a) => IVector (Vec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Storable

Methods

basicUnsafeFreeze :: Mutable (Vec n) s a -> ST s (Vec n a) Source #

basicThaw :: Vec n a -> ST s (Mutable (Vec n) s a) Source #

unsafeIndex :: Vec n a -> Int -> a Source #

Arity n => IVector (Vec n) a Source # 
Instance details

Defined in Data.Vector.Fixed.Strict

Methods

basicUnsafeFreeze :: Mutable (Vec n) s a -> ST s (Vec n a) Source #

basicThaw :: Vec n a -> ST s (Mutable (Vec n) s a) Source #

unsafeIndex :: Vec n a -> Int -> a Source #

index :: IVector v a => v a -> Int -> a Source #

freeze :: (PrimMonad m, IVector v a) => Mutable v (PrimState m) a -> m (v a) Source #

Safely convert mutable vector to immutable.

thaw :: (PrimMonad m, IVector v a) => v a -> m (Mutable v (PrimState m) a) Source #

Safely convert immutable vector to mutable.

unsafeFreeze :: (IVector v a, PrimMonad m) => Mutable v (PrimState m) a -> m (v a) Source #

Convert vector to immutable state. Mutable vector must not be modified afterwards.

Vector API

constructVec :: (ArityPeano (Dim v), IVector v a) => Fun (Dim v) a (v a) Source #

Generic construct implementation for array-based vectors.

inspectVec :: (ArityPeano (Dim v), IVector v a) => v a -> Fun (Dim v) a b -> b Source #

Generic inspect implementation for array-based vectors.