sized-vector-1.3.1.0: Size-parameterized vector types and functions.

Safe HaskellNone

Data.Vector.Sized

Contents

Description

Size-parameterized vector types and functions.

Synopsis

Vectors and indices

data Vector a n whereSource

Fixed-length list.

Constructors

Nil :: Vector a Z 
:- :: a -> Vector a n -> Vector a (S n) 

Instances

Monomorphicable Nat (Vector a)

Monomorphic representation of Vector a n is [a].

Eq a => Eq (Vector a n) 
Show a => Show (Vector a n) 
NFData a => NFData (Vector a n) 
Hashable a => Hashable (Vector a n) 

type Index = OrdinalSource

Type synonym for Ordinal.

Re-exports

Conversion & Construction

replicate :: SNat n -> a -> Vector a nSource

replicate n x is a vector of length n with x the value of every element.

replicate' :: forall n a. SingRep n => a -> Vector a nSource

replicate, with the length inferred.

singleton :: a -> Vector a (S Z)Source

Construct a singleton vector.

uncons :: Vector a (S n) -> (a, Vector a n)Source

Uncons the non-empty list.

List

fromList :: SNat n -> [a] -> Maybe (Vector a n)Source

Convert a list into a vector. If a given list is shorter than the length, it returns Nothing.

fromList' :: SingRep n => [a] -> Maybe (Vector a n)Source

Convert a list into vector, with length inferred.

unsafeFromList :: SNat n -> [a] -> Vector a nSource

Unsafe version of fromList. If a given list is shorter than the length, it aborts.

unsafeFromList' :: SingRep n => [a] -> Vector a nSource

Unsafe version of unsafeFromList.

toList :: Vector a n -> [a]Source

Convert a vector into a list.

Basic functions

append :: Vector a n -> Vector a m -> Vector a (n :+: m)Source

Append two Vectors.

head :: Vector a (S n) -> aSource

Extract the first element of a non-empty vector.

last :: Vector a (S n) -> aSource

Extract the last element of a non-empty vector.

tail :: Vector a (S n) -> Vector a nSource

Extract the elements after the head of a non-empty list.

null :: Vector a n -> BoolSource

Test whether a Vector is empty, though it's clear from the type parameter.

length :: Vector a n -> IntSource

length returns the length of a finite list as an Int.

sLength :: Vector a n -> SNat nSource

sLength returns the length of a finite list as a SNat n.

Vector transformations

map :: (a -> b) -> Vector a n -> Vector b nSource

map f xs is the vector obtained by applying f to each element of xs.

reverse :: forall a n. Vector a n -> Vector a nSource

reverse xs returns the elements of xs in reverse order. xs must be finite.

intersperse :: a -> Vector a n -> Vector a ((Two :* n) :- One)Source

The intersperse function takes an element and a vector and `intersperses' that element between the elements of the vector.

transpose :: SingRep n => Vector (Vector a n) m -> Vector (Vector a m) nSource

The transpose function transposes the rows and columns of its argument.

Reducing vectors (folds)

foldl :: (a -> b -> a) -> a -> Vector b n -> aSource

Left fold.

foldl' :: forall a b n. (a -> b -> a) -> a -> Vector b n -> aSource

A strict version of foldl.

foldl1 :: (a -> a -> a) -> Vector a (S n) -> aSource

Left fold for non-empty vector.

foldl1' :: (a -> a -> a) -> Vector a (S n) -> aSource

A strict version of foldl1.

foldr :: (a -> b -> b) -> b -> Vector a n -> bSource

Right fold.

foldr1 :: (a -> a -> a) -> Vector a (S n) -> aSource

Right fold for non-empty vector.

Special folds

concat :: Vector (Vector a n) m -> Vector a (m :*: n)Source

The function concat concatenates all vectors in th vector.

and :: Vector Bool m -> BoolSource

and returns the conjunction of a Boolean vector.

or :: Vector Bool m -> BoolSource

or returns the disjunction of a Boolean vector.

any :: (a -> Bool) -> Vector a n -> BoolSource

Applied to a predicate and a list, any determines if any element of the vector satisfies the predicate.

all :: (a -> Bool) -> Vector a n -> BoolSource

Applied to a predicate and a list, all determines if all element of the vector satisfies the predicate.

sum :: Num a => Vector a n -> aSource

product :: Num a => Vector a n -> aSource

maximum :: Ord a => Vector a (S n) -> aSource

minimum :: Ord a => Vector a (S n) -> aSource

Subvectors

Extracting subvectors

take :: (n :<<= m) ~ True => SNat n -> Vector a m -> Vector a nSource

take n xs returns the prefix of xs of length n, with n less than or equal to the length of xs.

takeAtMost :: SNat n -> Vector a m -> Vector a (Min n m)Source

A variant of take which returns entire xs if n is greater than the length of xs.

drop :: (n :<<= m) ~ True => SNat n -> Vector a m -> Vector a (m :-: n)Source

drop n xs returns the suffix of xs after the first n elements, with n less than or equal to the length of xs.

splitAt :: (n :<<= m) ~ True => SNat n -> Vector a m -> (Vector a n, Vector a (m :-: n))Source

splitAt n xs returns a tuple where first element is xs prefix of length n and second element is the remainder of the list. n should be less than or equal to the length of xs.

splitAtMost :: SNat n -> Vector a m -> (Vector a (Min n m), Vector a (m :-: n))Source

A varian of splitAt which allows n to be greater than the length of xs.

stripPrefix :: Eq a => Vector a n -> Vector a m -> Maybe (Vector a (m :- n))Source

The stripPrefix function drops the given prefix from a vector. It returns Nothing if the vector did not start with the prefix given or shorter than the prefix, or Just the vector after the prefix, if it does.

Searching vectors

Searching by equality

elem :: Eq a => a -> Vector a n -> BoolSource

notElem :: Eq a => a -> Vector a n -> BoolSource

Searching with a predicate

find :: (a -> Bool) -> Vector a n -> Maybe aSource

Indexing vectors

(!!) :: (n :<<= m) ~ True => Vector a (S m) -> SNat n -> aSource

List index (subscript) operator, starting from sZero.

(%!!) :: Vector a n -> Index n -> aSource

A Index version of !!.

index :: (n :<<= m) ~ True => SNat n -> Vector a (S m) -> aSource

Flipped version of !!.

sIndex :: Index n -> Vector a n -> aSource

A Index version of index.

elemIndex :: Eq a => a -> Vector a n -> Maybe IntSource

The elemIndex function returns the index (as Int) of the first element in the given list which is equal (by ==) to the query element, or Nothing if there is no such element.

sElemIndex :: Eq a => a -> Vector a n -> Maybe (Index n)Source

Index version of elemIndex.

findIndex :: (a -> Bool) -> Vector a n -> Maybe IntSource

The findIndex function takes a predicate and a vector and returns the index of the first element in the vector satisfying the predicate, or Nothing if there is no such element.

sFindIndex :: (a -> Bool) -> Vector a n -> Maybe (Index n)Source

Index version of findIndex.

findIndices :: (a -> Bool) -> Vector a n -> [Int]Source

The findIndices function extends findIndex, by returning the indices of all elements satisfying the predicate, in ascending order.

sFindIndices :: (a -> Bool) -> Vector a n -> [Index n]Source

Index version of findIndices.

elemIndices :: Eq a => a -> Vector a n -> [Int]Source

The elemIndices function extends elemIndex, by returning the indices of all elements equal to the query element, in ascending order.

sElemIndices :: Eq a => a -> Vector a n -> [Index n]Source

Index version of elemIndices.

Zipping vectors

zip :: Vector a n -> Vector b m -> Vector (a, b) (Min n m)Source

zip takes two vectors and returns a vector of corresponding pairs. If one input list is short, excess elements of the longer list are discarded.

zipSame :: Vector a n -> Vector b n -> Vector (a, b) nSource

Same as zip, but the given vectors must have the same length.

zipWith :: (a -> b -> c) -> Vector a n -> Vector b m -> Vector c (Min n m)Source

zipWith generalises zip by zipping with the function given as the first argument, instead of a tupling function.

zipWithSame :: (a -> b -> c) -> Vector a n -> Vector b n -> Vector c nSource

Same as zipWith, but the given vectors must have the same length.

unzip :: Vector (a, b) n -> (Vector a n, Vector b n)Source

Inverse of zipSame.