Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Vector.Fixed
Description
fixed-vector
library provides general API for working with short
N-element arrays. Functions in this module work on data types which
are instances of Vector
type class. We provide instances for data
types from base
: tuples, Complex
, and few others.
There are several length polymorphic arrays:
- Lazy boxed arrays Data.Vector.Fixed.Boxed.
- Strict boxed arrays Data.Vector.Fixed.Strict.
- Arrays backed by single
ByteArray
: Data.Vector.Fixed.Primitive. - Arrays backed by pinned memory: Data.Vector.Fixed.Storable.
- Arrays which infer array representation from element data type: Data.Vector.Fixed.Unboxed
- Continuation based
ContVec
which used by library internally.
Type level naturals don't have support for induction so all type
level computation with length and indices are done using Peano
numerals (PeanoNum
). Type level naturals are only used as type
parameters for defining length of arrays.
Instances for tuples
Library provides instances for tuples. They however come with caveat.
Let look at Vector
instance for 2-tuple:
instance b ~ a => Vector ((,) b) a
Tuple could only be Vector
instance if all elements have same
type. so first element fixes type of second one. Thus functions
which change element type like map
won't work:
>>> map (== 1) ((1,2) :: (Int,Int)) <interactive>:3:1: Couldn't match type `Int' with `Bool' In the expression: F.map (== 1) ((1, 2) :: (Int, Int)) In an equation for `it': it = map (== 1) ((1, 2) :: (Int, Int))
This could be solved either by switching to ContVec
manually:
>>>
(vector . map (==1) . cvec) ((1, 2) :: Tuple2 Int) :: Tuple2 Bool
(True,False)
or by using functions genereic in vector type from module Data.Vector.Fixed.Generic.
Synopsis
- class ArityPeano (Dim v) => Vector (v :: Type -> Type) a where
- type family Dim (v :: Type -> Type) :: PeanoNum
- type Arity (n :: Nat) = ArityPeano (Peano n)
- class ArityPeano (n :: PeanoNum)
- newtype Fun (n :: PeanoNum) a b = Fun {}
- length :: ArityPeano (Dim v) => v a -> Int
- data PeanoNum
- type family Peano (n :: Nat) :: PeanoNum where ...
- type N1 = 'S 'Z
- type N2 = 'S N1
- type N3 = 'S N2
- type N4 = 'S N3
- type N5 = 'S N4
- type N6 = 'S N5
- type N7 = 'S N6
- type N8 = 'S N7
- mk0 :: (Vector v a, Dim v ~ 'Z) => v a
- mk1 :: (Vector v a, Dim v ~ N1) => a -> v a
- mk2 :: (Vector v a, Dim v ~ N2) => a -> a -> v a
- mk3 :: (Vector v a, Dim v ~ N3) => a -> a -> a -> v a
- mk4 :: (Vector v a, Dim v ~ N4) => a -> a -> a -> a -> v a
- mk5 :: (Vector v a, Dim v ~ N5) => a -> a -> a -> a -> a -> v a
- mk6 :: (Vector v a, Dim v ~ N6) => a -> a -> a -> a -> a -> a -> v a
- mk7 :: (Vector v a, Dim v ~ N7) => a -> a -> a -> a -> a -> a -> a -> v a
- mk8 :: (Vector v a, Dim v ~ N8) => a -> a -> a -> a -> a -> a -> a -> a -> v a
- mkN :: forall proxy v a. Vector v a => proxy (v a) -> Fn (Dim v) a (v a)
- pattern V1 :: (Vector v a, Dim v ~ N1) => a -> v a
- pattern V2 :: (Vector v a, Dim v ~ N2) => a -> a -> v a
- pattern V3 :: (Vector v a, Dim v ~ N3) => a -> a -> a -> v a
- pattern V4 :: (Vector v a, Dim v ~ N4) => a -> a -> a -> a -> v a
- replicate :: Vector v a => a -> v a
- replicateM :: (Vector v a, Applicative f) => f a -> f (v a)
- generate :: Vector v a => (Int -> a) -> v a
- generateM :: (Applicative f, Vector v a) => (Int -> f a) -> f (v a)
- unfoldr :: Vector v a => (b -> (a, b)) -> b -> v a
- basis :: (Vector v a, Num a) => Int -> v a
- head :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k) => v a -> a
- tail :: (Vector v a, Vector w a, Dim v ~ 'S (Dim w)) => v a -> w a
- cons :: (Vector v a, Vector w a, Dim w ~ 'S (Dim v)) => a -> v a -> w a
- snoc :: (Vector v a, Vector w a, Dim w ~ 'S (Dim v)) => a -> v a -> w a
- concat :: (Vector v a, Vector u a, Vector w a, Add (Dim v) (Dim u) ~ Dim w) => v a -> u a -> w a
- reverse :: Vector v a => v a -> v a
- class Index (k :: PeanoNum) (n :: PeanoNum)
- (!) :: Vector v a => v a -> Int -> a
- index :: forall (k :: Nat) v a proxy. (Vector v a, Index (Peano k) (Dim v)) => v a -> proxy k -> a
- set :: forall (k :: Nat) v a proxy. (Vector v a, Index (Peano k) (Dim v)) => proxy k -> a -> v a -> v a
- element :: (Vector v a, Functor f) => Int -> (a -> f a) -> v a -> f (v a)
- elementTy :: forall (k :: Nat) v a f proxy. (Vector v a, Index (Peano k) (Dim v), Functor f) => proxy k -> (a -> f a) -> v a -> f (v a)
- map :: (Vector v a, Vector v b) => (a -> b) -> v a -> v b
- mapM :: (Vector v a, Vector v b, Applicative f) => (a -> f b) -> v a -> f (v b)
- mapM_ :: (Vector v a, Applicative f) => (a -> f b) -> v a -> f ()
- imap :: (Vector v a, Vector v b) => (Int -> a -> b) -> v a -> v b
- imapM :: (Vector v a, Vector v b, Applicative f) => (Int -> a -> f b) -> v a -> f (v b)
- imapM_ :: (Vector v a, Applicative f) => (Int -> a -> f b) -> v a -> f ()
- scanl :: (Vector v a, Vector w b, Dim w ~ 'S (Dim v)) => (b -> a -> b) -> b -> v a -> w b
- scanl1 :: Vector v a => (a -> a -> a) -> v a -> v a
- sequence :: (Vector v a, Vector v (f a), Applicative f) => v (f a) -> f (v a)
- sequence_ :: (Vector v (f a), Applicative f) => v (f a) -> f ()
- traverse :: (Vector v a, Vector v b, Applicative f) => (a -> f b) -> v a -> f (v b)
- distribute :: (Vector v a, Vector v (f a), Functor f) => f (v a) -> v (f a)
- collect :: (Vector v a, Vector v b, Vector v (f b), Functor f) => (a -> v b) -> f a -> v (f b)
- foldl :: Vector v a => (b -> a -> b) -> b -> v a -> b
- foldl' :: Vector v a => (b -> a -> b) -> b -> v a -> b
- foldr :: Vector v a => (a -> b -> b) -> b -> v a -> b
- foldl1 :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k) => (a -> a -> a) -> v a -> a
- fold :: (Vector v m, Monoid m) => v m -> m
- foldMap :: (Vector v a, Monoid m) => (a -> m) -> v a -> m
- ifoldl :: Vector v a => (b -> Int -> a -> b) -> b -> v a -> b
- ifoldr :: Vector v a => (Int -> a -> b -> b) -> b -> v a -> b
- foldM :: (Vector v a, Monad m) => (b -> a -> m b) -> b -> v a -> m b
- ifoldM :: (Vector v a, Monad m) => (b -> Int -> a -> m b) -> b -> v a -> m b
- sum :: (Vector v a, Num a) => v a -> a
- maximum :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k, Ord a) => v a -> a
- minimum :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k, Ord a) => v a -> a
- and :: Vector v Bool => v Bool -> Bool
- or :: Vector v Bool => v Bool -> Bool
- all :: Vector v a => (a -> Bool) -> v a -> Bool
- any :: Vector v a => (a -> Bool) -> v a -> Bool
- find :: Vector v a => (a -> Bool) -> v a -> Maybe a
- zipWith :: (Vector v a, Vector v b, Vector v c) => (a -> b -> c) -> v a -> v b -> v c
- zipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d) => (a -> b -> c -> d) -> v a -> v b -> v c -> v d
- zipWithM :: (Vector v a, Vector v b, Vector v c, Applicative f) => (a -> b -> f c) -> v a -> v b -> f (v c)
- zipWithM_ :: (Vector v a, Vector v b, Applicative f) => (a -> b -> f c) -> v a -> v b -> f ()
- izipWith :: (Vector v a, Vector v b, Vector v c) => (Int -> a -> b -> c) -> v a -> v b -> v c
- izipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d) => (Int -> a -> b -> c -> d) -> v a -> v b -> v c -> v d
- izipWithM :: (Vector v a, Vector v b, Vector v c, Applicative f) => (Int -> a -> b -> f c) -> v a -> v b -> f (v c)
- izipWithM_ :: (Vector v a, Vector v b, Vector v c, Applicative f, Vector v (f c)) => (Int -> a -> b -> f c) -> v a -> v b -> f ()
- eq :: (Vector v a, Eq a) => v a -> v a -> Bool
- ord :: (Vector v a, Ord a) => v a -> v a -> Ordering
- convert :: (Vector v a, Vector w a, Dim v ~ Dim w) => v a -> w a
- toList :: Vector v a => v a -> [a]
- fromList :: Vector v a => [a] -> v a
- fromList' :: Vector v a => [a] -> v a
- fromListM :: Vector v a => [a] -> Maybe (v a)
- fromFoldable :: (Vector v a, Foldable f) => f a -> Maybe (v a)
- newtype VecList (n :: Nat) a = VecList (VecPeano (Peano n) a)
- data VecPeano (n :: PeanoNum) a where
- newtype Only a = Only a
- data Empty (a :: k) = Empty
- type Tuple2 a = (a, a)
- type Tuple3 a = (a, a, a)
- type Tuple4 a = (a, a, a, a)
- type Tuple5 a = (a, a, a, a, a)
- data ContVec (n :: PeanoNum) a
- empty :: ContVec 'Z a
- vector :: Vector v a => ContVec (Dim v) a -> v a
- cvec :: Vector v a => v a -> ContVec (Dim v) a
- newtype ViaFixed (v :: k -> Type) (a :: k) = ViaFixed (v a)
- defaultAlignemnt :: Storable a => v a -> Int
- defaultSizeOf :: (Storable a, Vector v a) => v a -> Int
- defaultPeek :: (Storable a, Vector v a) => Ptr (v a) -> IO (v a)
- defaultPoke :: (Storable a, Vector v a) => Ptr (v a) -> v a -> IO ()
- defaultRnf :: (NFData a, Vector v a) => v a -> ()
- sequenceA :: (Vector v a, Vector v (f a), Applicative f) => v (f a) -> f (v a)
Vector type class
class ArityPeano (Dim v) => Vector (v :: Type -> Type) a where Source #
Type class for vectors with fixed length. Instance should provide
two functions: one to create vector from N
elements and another
for vector deconstruction. They must obey following law:
inspect v construct = v
For example instance for 2D vectors could be written as:
data V2 a = V2 a a type instance V2 = 2 instance Vector V2 a where construct = Fun V2 inspect (V2 a b) (Fun f) = f a b
Methods
construct :: Fun (Dim v) a (v a) Source #
N-ary function for creation of vectors. It takes N
elements
of array as parameters and return vector.
inspect :: v a -> Fun (Dim v) a b -> b Source #
Deconstruction of vector. It takes N-ary function as parameters and applies vector's elements to it.
basicIndex :: v a -> Int -> a Source #
Optional more efficient implementation of indexing. Shouldn't
be used directly, use !
instead.
Instances
Vector Complex a Source # | |
Vector Identity a Source # | |
Vector Only a Source # | |
Vector (Proxy :: Type -> Type) a Source # | |
Vector (Empty :: Type -> Type) a Source # | |
Arity n => Vector (VecList n) a Source # | |
ArityPeano n => Vector (VecPeano n) a Source # | |
Arity n => Vector (Vec n) a Source # | |
ArityPeano n => Vector (ContVec n) a Source # | |
(Arity n, Prim a) => Vector (Vec n) a Source # | |
(Arity n, Storable a) => Vector (Vec n) a Source # | |
Arity n => Vector (Vec n) a Source # | |
(n <= 64, Arity n, a ~ Bool) => Vector (BitVec n) a Source # | |
(Arity n, Unbox n a) => Vector (Vec n) a Source # | |
b ~ a => Vector ((,) b) a Source # | Note this instance (and other instances for tuples) is
essentially monomorphic in element type. Vector type v of 2
element tuple |
Vector v a => Vector (ViaFixed v) a Source # | |
(b ~ a, c ~ a) => Vector ((,,) b c) a Source # | |
(b ~ a, c ~ a, d ~ a) => Vector ((,,,) b c d) a Source # | |
(Arity n, Unbox n a, Unbox n b) => Vector (T2 n a b) (a, b) Source # | |
(b ~ a, c ~ a, d ~ a, e ~ a) => Vector ((,,,,) b c d e) a Source # | |
(Arity n, Unbox n a, Unbox n b, Unbox n c) => Vector (T3 n a b c) (a, b, c) Source # | |
(b ~ a, c ~ a, d ~ a, e ~ a, f ~ a) => Vector ((,,,,,) b c d e f) a Source # | |
(b ~ a, c ~ a, d ~ a, e ~ a, f ~ a, g ~ a) => Vector ((,,,,,,) b c d e f g) a Source # | |
type family Dim (v :: Type -> Type) :: PeanoNum Source #
Size of vector expressed as Peano natural.
Instances
type Arity (n :: Nat) = ArityPeano (Peano n) Source #
Synonym for writing constrains using type level naturals.
class ArityPeano (n :: PeanoNum) Source #
Type class for defining and applying n-ary functions.
Minimal complete definition
accum, accumPeano, applyFun, applyFunM, reducePeano, peanoToInt, dictionaryPred
Instances
ArityPeano 'Z Source # | |
Defined in Data.Vector.Fixed.Cont Methods accum :: (forall (k :: PeanoNum). t ('S k) -> a -> t k) -> (t 'Z -> b) -> t 'Z -> Fun 'Z a b Source # accumPeano :: (forall (k :: PeanoNum). ArityPeano k => t ('S k) -> a -> t k) -> (t 'Z -> b) -> t 'Z -> Fun 'Z a b Source # applyFun :: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t 'Z -> (ContVec 'Z a, t 'Z) Source # applyFunM :: Applicative f => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t 'Z -> (f (ContVec 'Z a), t 'Z) Source # reducePeano :: (forall (k :: PeanoNum). t ('S k) -> t k) -> t 'Z -> t 'Z Source # peanoToInt :: Proxy# 'Z -> Int Source # dictionaryPred :: forall (k :: PeanoNum) r. 'Z ~ 'S k => Proxy# 'Z -> (ArityPeano k => r) -> r Source # | |
ArityPeano n => ArityPeano ('S n) Source # | |
Defined in Data.Vector.Fixed.Cont Methods accum :: (forall (k :: PeanoNum). t ('S k) -> a -> t k) -> (t 'Z -> b) -> t ('S n) -> Fun ('S n) a b Source # accumPeano :: (forall (k :: PeanoNum). ArityPeano k => t ('S k) -> a -> t k) -> (t 'Z -> b) -> t ('S n) -> Fun ('S n) a b Source # applyFun :: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t ('S n) -> (ContVec ('S n) a, t 'Z) Source # applyFunM :: Applicative f => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t ('S n) -> (f (ContVec ('S n) a), t 'Z) Source # reducePeano :: (forall (k :: PeanoNum). t ('S k) -> t k) -> t ('S n) -> t 'Z Source # peanoToInt :: Proxy# ('S n) -> Int Source # dictionaryPred :: forall (k :: PeanoNum) r. 'S n ~ 'S k => Proxy# ('S n) -> (ArityPeano k => r) -> r Source # |
newtype Fun (n :: PeanoNum) a b Source #
Newtype wrapper which is used to make Fn
injective. It's a
function which takes n
parameters of type a
and returns value
of type b
.
Instances
ArityPeano n => Applicative (Fun n a) Source # | |
ArityPeano n => Functor (Fun n a) Source # | |
ArityPeano n => Monad (Fun n a) Source # | Reader |
length :: ArityPeano (Dim v) => v a -> Int Source #
Length of vector. Function doesn't evaluate its argument.
Peano numbers
Peano numbers. Since type level naturals don't support induction we have to convert type nats to Peano representation first and work with it,
type family Peano (n :: Nat) :: PeanoNum where ... Source #
Convert type level natural to Peano representation
Construction and destructions
There are several ways to construct fixed vectors except using
their constructor if it's available. For small ones it's possible
to use functions mk1
, mk2
, etc.
>>>
mk3 'a' 'b' 'c' :: (Char,Char,Char)
('a','b','c')
Another way is to use pattern synonyms for construction and inspection of vectors:
>>>
V2 'a' 'b' :: (Char,Char)
('a','b')
>>>
case ('a','b') of V2 a b -> [a,b]
"ab"
Last option is to use convert
to convert between different vector
types of same length. For example
v = convert (x,y,z)
This could be used in view patterns as well:
foo :: Vec3 Double -> Foo foo (convert -> (x,y,z)) = ...
Pattern synonyms use this trick internally.
Constructors
mkN :: forall proxy v a. Vector v a => proxy (v a) -> Fn (Dim v) a (v a) Source #
N-ary constructor. Despite scary signature it's just N-ary function with additional type parameter which is used to fix type of vector being constructed. It could be used as:
v = mkN (Proxy :: Proxy (Int,Int,Int)) 1 2 3
or using TypeApplications
syntax:
v = mkN (Proxy @(Int,Int,Int)) 1 2 3
or if type of v
is fixed elsewhere
v = mkN [v] 1 2 3
Pattern synonyms
Functions
Creation
replicate :: Vector v a => a -> v a Source #
Replicate value n times.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec2)
>>>
replicate 1 :: Vec2 Int
[1,1]
>>>
replicate 2 :: (Double,Double,Double)
(2.0,2.0,2.0)
>>>
import Data.Vector.Fixed.Boxed (Vec4)
>>>
replicate "foo" :: Vec4 String
["foo","foo","foo","foo"]
replicateM :: (Vector v a, Applicative f) => f a -> f (v a) Source #
Execute monadic action for every element of vector.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec2,Vec3)
>>>
replicateM (Just 3) :: Maybe (Vec3 Int)
Just [3,3,3]>>>
replicateM (putStrLn "Hi!") :: IO (Vec2 ())
Hi! Hi! [(),()]
generate :: Vector v a => (Int -> a) -> v a Source #
Generate vector from function which maps element's index to its value.
Examples:
>>>
import Data.Vector.Fixed.Unboxed (Vec4)
>>>
generate (^2) :: Vec4 Int
[0,1,4,9]
generateM :: (Applicative f, Vector v a) => (Int -> f a) -> f (v a) Source #
Generate vector from monadic function which maps element's index to its value.
basis :: (Vector v a, Num a) => Int -> v a Source #
Unit vector along Nth axis. If index is larger than vector dimensions returns zero vector.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec3)
>>>
basis 0 :: Vec3 Int
[1,0,0]>>>
basis 1 :: Vec3 Int
[0,1,0]>>>
basis 3 :: Vec3 Int
[0,0,0]
Transformations
head :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k) => v a -> a Source #
First element of vector.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec3)
>>>
let x = mk3 1 2 3 :: Vec3 Int
>>>
head x
1
tail :: (Vector v a, Vector w a, Dim v ~ 'S (Dim w)) => v a -> w a Source #
Tail of vector.
Examples:
>>>
import Data.Complex
>>>
tail (1,2,3) :: Complex Double
2.0 :+ 3.0
cons :: (Vector v a, Vector w a, Dim w ~ 'S (Dim v)) => a -> v a -> w a Source #
Cons element to the vector
snoc :: (Vector v a, Vector w a, Dim w ~ 'S (Dim v)) => a -> v a -> w a Source #
Append element to the vector
concat :: (Vector v a, Vector u a, Vector w a, Add (Dim v) (Dim u) ~ Dim w) => v a -> u a -> w a Source #
Indexing & lenses
class Index (k :: PeanoNum) (n :: PeanoNum) Source #
Type class for indexing of vector of length n
with statically
known index k
(!) :: Vector v a => v a -> Int -> a Source #
Retrieve vector's element at index. Generic implementation is O(n) but more efficient one is used when possible.
index :: forall (k :: Nat) v a proxy. (Vector v a, Index (Peano k) (Dim v)) => v a -> proxy k -> a Source #
Get element from vector at statically known index
set :: forall (k :: Nat) v a proxy. (Vector v a, Index (Peano k) (Dim v)) => proxy k -> a -> v a -> v a Source #
Set n'th element in the vector
element :: (Vector v a, Functor f) => Int -> (a -> f a) -> v a -> f (v a) Source #
Twan van Laarhoven's lens for element of vector
elementTy :: forall (k :: Nat) v a f proxy. (Vector v a, Index (Peano k) (Dim v), Functor f) => proxy k -> (a -> f a) -> v a -> f (v a) Source #
Twan van Laarhoven's lens for element of vector with statically known index.
Maps
mapM :: (Vector v a, Vector v b, Applicative f) => (a -> f b) -> v a -> f (v b) Source #
Effectful map over vector.
mapM_ :: (Vector v a, Applicative f) => (a -> f b) -> v a -> f () Source #
Apply monadic action to each element of vector and ignore result.
imap :: (Vector v a, Vector v b) => (Int -> a -> b) -> v a -> v b Source #
Apply function to every element of the vector and its index.
imapM :: (Vector v a, Vector v b, Applicative f) => (Int -> a -> f b) -> v a -> f (v b) Source #
Apply monadic function to every element of the vector and its index.
imapM_ :: (Vector v a, Applicative f) => (Int -> a -> f b) -> v a -> f () Source #
Apply monadic function to every element of the vector and its index and discard result.
scanl :: (Vector v a, Vector w b, Dim w ~ 'S (Dim v)) => (b -> a -> b) -> b -> v a -> w b Source #
Left scan over vector
sequence :: (Vector v a, Vector v (f a), Applicative f) => v (f a) -> f (v a) Source #
Evaluate every action in the vector from left to right.
sequence_ :: (Vector v (f a), Applicative f) => v (f a) -> f () Source #
Evaluate every action in the vector from left to right and ignore result
traverse :: (Vector v a, Vector v b, Applicative f) => (a -> f b) -> v a -> f (v b) Source #
Analog of traverse
from Traversable
.
collect :: (Vector v a, Vector v b, Vector v (f b), Functor f) => (a -> v b) -> f a -> v (f b) Source #
Folds
foldl1 :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k) => (a -> a -> a) -> v a -> a Source #
Left fold over vector
fold :: (Vector v m, Monoid m) => v m -> m Source #
Combine the elements of a structure using a monoid. Similar to
fold
foldMap :: (Vector v a, Monoid m) => (a -> m) -> v a -> m Source #
Map each element of the structure to a monoid,
and combine the results. Similar to foldMap
ifoldl :: Vector v a => (b -> Int -> a -> b) -> b -> v a -> b Source #
Left fold over vector. Function is applied to each element and its index.
foldM :: (Vector v a, Monad m) => (b -> a -> m b) -> b -> v a -> m b Source #
Monadic fold over vector.
ifoldM :: (Vector v a, Monad m) => (b -> Int -> a -> m b) -> b -> v a -> m b Source #
Left monadic fold over vector. Function is applied to each element and its index.
Special folds
maximum :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k, Ord a) => v a -> a Source #
Maximal element of vector.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec3)
>>>
let x = mk3 1 2 3 :: Vec3 Int
>>>
maximum x
3
minimum :: forall v a (k :: PeanoNum). (Vector v a, Dim v ~ 'S k, Ord a) => v a -> a Source #
Minimal element of vector.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec3)
>>>
let x = mk3 1 2 3 :: Vec3 Int
>>>
minimum x
1
all :: Vector v a => (a -> Bool) -> v a -> Bool Source #
Determines whether all elements of vector satisfy predicate.
any :: Vector v a => (a -> Bool) -> v a -> Bool Source #
Determines whether any of element of vector satisfy predicate.
Zips
zipWith :: (Vector v a, Vector v b, Vector v c) => (a -> b -> c) -> v a -> v b -> v c Source #
Zip two vector together using function.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec3)
>>>
let b0 = basis 0 :: Vec3 Int
>>>
let b1 = basis 1 :: Vec3 Int
>>>
let b2 = basis 2 :: Vec3 Int
>>>
let vplus x y = zipWith (+) x y
>>>
vplus b0 b1
[1,1,0]>>>
vplus b0 b2
[1,0,1]>>>
vplus b1 b2
[0,1,1]
zipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d) => (a -> b -> c -> d) -> v a -> v b -> v c -> v d Source #
Zip three vector together
zipWithM :: (Vector v a, Vector v b, Vector v c, Applicative f) => (a -> b -> f c) -> v a -> v b -> f (v c) Source #
Zip two vector together using monadic function.
zipWithM_ :: (Vector v a, Vector v b, Applicative f) => (a -> b -> f c) -> v a -> v b -> f () Source #
Zip two vector elementwise using monadic function and discard result
izipWith :: (Vector v a, Vector v b, Vector v c) => (Int -> a -> b -> c) -> v a -> v b -> v c Source #
Zip two vector together using function which takes element index as well.
izipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d) => (Int -> a -> b -> c -> d) -> v a -> v b -> v c -> v d Source #
Zip three vector together
izipWithM :: (Vector v a, Vector v b, Vector v c, Applicative f) => (Int -> a -> b -> f c) -> v a -> v b -> f (v c) Source #
Zip two vector together using monadic function which takes element index as well..
izipWithM_ :: (Vector v a, Vector v b, Vector v c, Applicative f, Vector v (f c)) => (Int -> a -> b -> f c) -> v a -> v b -> f () Source #
Zip two vector elementwise using monadic function and discard result
Special zips
eq :: (Vector v a, Eq a) => v a -> v a -> Bool Source #
Test two vectors for equality.
Examples:
>>>
import Data.Vector.Fixed.Boxed (Vec2)
>>>
let v0 = basis 0 :: Vec2 Int
>>>
let v1 = basis 1 :: Vec2 Int
>>>
v0 `eq` v0
True>>>
v0 `eq` v1
False
Conversion
convert :: (Vector v a, Vector w a, Dim v ~ Dim w) => v a -> w a Source #
Convert between different vector types
fromList :: Vector v a => [a] -> v a Source #
Create vector form list. Will throw error if list is shorter than resulting vector.
fromList' :: Vector v a => [a] -> v a Source #
Create vector form list. Will throw error if list has different length from resulting vector.
fromListM :: Vector v a => [a] -> Maybe (v a) Source #
Create vector form list. Will return Nothing
if list has different
length from resulting vector.
fromFoldable :: (Vector v a, Foldable f) => f a -> Maybe (v a) Source #
Create vector from Foldable
data type. Will return Nothing
if
data type different number of elements that resulting vector.
Data types
newtype VecList (n :: Nat) a Source #
Type-based vector with statically known length parametrized by GHC's type naturals
Instances
data VecPeano (n :: PeanoNum) a where Source #
Standard GADT-based vector with statically known length parametrized by Peano numbers.
Constructors
Nil :: forall a. VecPeano 'Z a | |
Cons :: forall a (n1 :: PeanoNum). a -> VecPeano n1 a -> VecPeano ('S n1) a |
Instances
Single-element tuple.
Constructors
Only a |
Instances
Foldable Only Source # | |
Defined in Data.Vector.Fixed Methods fold :: Monoid m => Only m -> m # foldMap :: Monoid m => (a -> m) -> Only a -> m # foldMap' :: Monoid m => (a -> m) -> Only a -> m # foldr :: (a -> b -> b) -> b -> Only a -> b # foldr' :: (a -> b -> b) -> b -> Only a -> b # foldl :: (b -> a -> b) -> b -> Only a -> b # foldl' :: (b -> a -> b) -> b -> Only a -> b # foldr1 :: (a -> a -> a) -> Only a -> a # foldl1 :: (a -> a -> a) -> Only a -> a # elem :: Eq a => a -> Only a -> Bool # maximum :: Ord a => Only a -> a # | |
Traversable Only Source # | |
Functor Only Source # | |
Vector Only a Source # | |
Data a => Data (Only a) Source # | |
Defined in Data.Vector.Fixed Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Only a -> c (Only a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Only a) # toConstr :: Only a -> Constr # dataTypeOf :: Only a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Only a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Only a)) # gmapT :: (forall b. Data b => b -> b) -> Only a -> Only a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Only a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Only a -> r # gmapQ :: (forall d. Data d => d -> u) -> Only a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Only a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Only a -> m (Only a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Only a -> m (Only a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Only a -> m (Only a) # | |
Storable a => Storable (Only a) Source # | |
Monoid a => Monoid (Only a) Source # | |
Semigroup a => Semigroup (Only a) Source # | |
Show a => Show (Only a) Source # | |
NFData a => NFData (Only a) Source # | |
Defined in Data.Vector.Fixed | |
Eq a => Eq (Only a) Source # | |
Ord a => Ord (Only a) Source # | |
type Dim Only Source # | |
Defined in Data.Vector.Fixed |
Empty tuple.
Constructors
Empty |
Instances
Foldable (Empty :: Type -> Type) Source # | |
Defined in Data.Vector.Fixed Methods fold :: Monoid m => Empty m -> m # foldMap :: Monoid m => (a -> m) -> Empty a -> m # foldMap' :: Monoid m => (a -> m) -> Empty a -> m # foldr :: (a -> b -> b) -> b -> Empty a -> b # foldr' :: (a -> b -> b) -> b -> Empty a -> b # foldl :: (b -> a -> b) -> b -> Empty a -> b # foldl' :: (b -> a -> b) -> b -> Empty a -> b # foldr1 :: (a -> a -> a) -> Empty a -> a # foldl1 :: (a -> a -> a) -> Empty a -> a # elem :: Eq a => a -> Empty a -> Bool # maximum :: Ord a => Empty a -> a # minimum :: Ord a => Empty a -> a # | |
Traversable (Empty :: Type -> Type) Source # | |
Functor (Empty :: Type -> Type) Source # | |
Vector (Empty :: Type -> Type) a Source # | |
(Typeable a, Typeable k) => Data (Empty a) Source # | |
Defined in Data.Vector.Fixed Methods gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Empty a -> c (Empty a) # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Empty a) # toConstr :: Empty a -> Constr # dataTypeOf :: Empty a -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Empty a)) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Empty a)) # gmapT :: (forall b. Data b => b -> b) -> Empty a -> Empty a # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Empty a -> r # gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Empty a -> r # gmapQ :: (forall d. Data d => d -> u) -> Empty a -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Empty a -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Empty a -> m (Empty a) # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Empty a -> m (Empty a) # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Empty a -> m (Empty a) # | |
Show (Empty a) Source # | |
NFData (Empty a) Source # | |
Defined in Data.Vector.Fixed | |
Eq (Empty a) Source # | |
Ord (Empty a) Source # | |
type Dim (Empty :: Type -> Type) Source # | |
Tuple synonyms
Continuation-based vectors
data ContVec (n :: PeanoNum) a Source #
Vector represented as continuation. Alternative wording: it's Church encoded N-element vector.
Instances
cvec :: Vector v a => v a -> ContVec (Dim v) a Source #
Convert regular vector to continuation based one.
Instance deriving
newtype ViaFixed (v :: k -> Type) (a :: k) Source #
Newtype for deriving instance for data types which has instance
of Vector
. It supports Eq
, Ord
, Semigroup
, Monoid
,
Storable
, NFData
, Functor
, Applicative
, Foldable
.
Constructors
ViaFixed (v a) |
Instances
(forall a. Vector v a) => Foldable (ViaFixed v) Source # | |
Defined in Data.Vector.Fixed Methods fold :: Monoid m => ViaFixed v m -> m # foldMap :: Monoid m => (a -> m) -> ViaFixed v a -> m # foldMap' :: Monoid m => (a -> m) -> ViaFixed v a -> m # foldr :: (a -> b -> b) -> b -> ViaFixed v a -> b # foldr' :: (a -> b -> b) -> b -> ViaFixed v a -> b # foldl :: (b -> a -> b) -> b -> ViaFixed v a -> b # foldl' :: (b -> a -> b) -> b -> ViaFixed v a -> b # foldr1 :: (a -> a -> a) -> ViaFixed v a -> a # foldl1 :: (a -> a -> a) -> ViaFixed v a -> a # toList :: ViaFixed v a -> [a] # null :: ViaFixed v a -> Bool # length :: ViaFixed v a -> Int # elem :: Eq a => a -> ViaFixed v a -> Bool # maximum :: Ord a => ViaFixed v a -> a # minimum :: Ord a => ViaFixed v a -> a # | |
(forall a. Vector v a) => Applicative (ViaFixed v) Source # | |
Defined in Data.Vector.Fixed | |
(forall a. Vector v a) => Functor (ViaFixed v) Source # | |
Vector v a => Vector (ViaFixed v) a Source # | |
(Vector v a, Storable a) => Storable (ViaFixed v a) Source # | |
Defined in Data.Vector.Fixed Methods sizeOf :: ViaFixed v a -> Int # alignment :: ViaFixed v a -> Int # peekElemOff :: Ptr (ViaFixed v a) -> Int -> IO (ViaFixed v a) # pokeElemOff :: Ptr (ViaFixed v a) -> Int -> ViaFixed v a -> IO () # peekByteOff :: Ptr b -> Int -> IO (ViaFixed v a) # pokeByteOff :: Ptr b -> Int -> ViaFixed v a -> IO () # | |
(Vector v a, Monoid a) => Monoid (ViaFixed v a) Source # | |
(Vector v a, Semigroup a) => Semigroup (ViaFixed v a) Source # | |
(Vector v a, Show a) => Show (ViaFixed v a) Source # | |
(Vector v a, NFData a) => NFData (ViaFixed v a) Source # | |
Defined in Data.Vector.Fixed | |
(Vector v a, Eq a) => Eq (ViaFixed v a) Source # | |
(Vector v a, Ord a) => Ord (ViaFixed v a) Source # | |
Defined in Data.Vector.Fixed | |
type Dim (ViaFixed v) Source # | |
Defined in Data.Vector.Fixed |
Storable
Default implementation of methods for Storable type class assumes that individual elements of vector are stored as N-element array.
defaultAlignemnt :: Storable a => v a -> Int Source #
defaultSizeOf :: (Storable a, Vector v a) => v a -> Int Source #
Default implementation of sizeOf
for Storable
type class for
fixed vectors
NFData
defaultRnf :: (NFData a, Vector v a) => v a -> () Source #
Default implementation of rnf
from NFData
type class
Deprecated functions
sequenceA :: (Vector v a, Vector v (f a), Applicative f) => v (f a) -> f (v a) Source #
Deprecated: Use sequence instead
Analog of sequenceA
from Traversable
.