Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Vector.Fixed.Cont
Description
API for Church-encoded vectors. Implementation of function from Data.Vector.Fixed module uses these function internally in order to provide shortcut fusion.
Synopsis
- data PeanoNum
- type family Peano (n :: Nat) :: PeanoNum where ...
- type family Add (n :: PeanoNum) (m :: PeanoNum) :: PeanoNum where ...
- type family Fn (n :: PeanoNum) a b where ...
- newtype Fun (n :: PeanoNum) a b = Fun {}
- type Arity (n :: Nat) = (ArityPeano (Peano n), KnownNat n, Peano (n + 1) ~ 'S (Peano n))
- class ArityPeano (n :: PeanoNum) where
- accum :: (forall (k :: PeanoNum). t ('S k) -> a -> t k) -> (t 'Z -> b) -> t n -> Fun n a b
- applyFun :: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t n -> (CVecPeano n a, t 'Z)
- applyFunM :: Applicative f => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t n -> (f (CVecPeano n a), t 'Z)
- reverseF :: Fun n a b -> Fun n a b
- gunfoldF :: Data a => (forall b x. Data b => c (b -> x) -> c x) -> T_gunfold c r a n -> c r
- arity :: forall (n :: Nat) proxy. KnownNat n => proxy n -> Int
- apply :: forall (n :: Nat) t a. Arity n => (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t (Peano n) -> ContVec n a
- applyM :: forall f (n :: Nat) t a. (Applicative f, Arity n) => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t (Peano n) -> f (ContVec n a)
- constFun :: forall (n :: PeanoNum) a b. Fun n a b -> Fun ('S n) a b
- curryFirst :: forall (n :: PeanoNum) a b. Fun ('S n) a b -> a -> Fun n a b
- uncurryFirst :: forall a (n :: PeanoNum) b. (a -> Fun n a b) -> Fun ('S n) a b
- curryLast :: forall (n :: PeanoNum) a b. ArityPeano n => Fun ('S n) a b -> Fun n a (a -> b)
- curryMany :: forall (n :: PeanoNum) (k :: PeanoNum) a b. ArityPeano n => Fun (Add n k) a b -> Fun n a (Fun k a b)
- apLast :: forall (n :: PeanoNum) a b. ArityPeano n => Fun ('S n) a b -> a -> Fun n a b
- shuffleFun :: forall (n :: PeanoNum) b a r. ArityPeano n => (b -> Fun n a r) -> Fun n a (b -> r)
- withFun :: forall (n :: PeanoNum) a b. (Fun n a b -> Fun n a b) -> Fun ('S n) a b -> Fun ('S n) a b
- type family Dim (v :: Type -> Type) :: Nat
- class Arity (Dim v) => Vector (v :: Type -> Type) a where
- class (Vector (v n) a, Dim (v n) ~ n) => VectorN (v :: Nat -> Type -> Type) (n :: Nat) a
- length :: KnownNat (Dim v) => v a -> Int
- newtype ContVec (n :: Nat) a = ContVec (forall r. Fun (Peano n) a r -> r)
- newtype CVecPeano (n :: PeanoNum) a = CVecPeano (forall r. Fun n a r -> r)
- consPeano :: forall a (n :: PeanoNum). a -> CVecPeano n a -> CVecPeano ('S n) a
- toContVec :: forall (n :: Nat) a. CVecPeano (Peano n) a -> ContVec n a
- runContVec :: forall (n :: Nat) a r. Fun (Peano n) a r -> ContVec n a -> r
- cvec :: forall v a (n :: Nat). (Vector v a, Dim v ~ n) => v a -> ContVec n a
- fromList :: forall (n :: Nat) a. Arity n => [a] -> ContVec n a
- fromList' :: forall (n :: Nat) a. Arity n => [a] -> ContVec n a
- fromListM :: forall (n :: Nat) a. Arity n => [a] -> Maybe (ContVec n a)
- toList :: forall (n :: Nat) a. Arity n => ContVec n a -> [a]
- replicate :: forall (n :: Nat) a. Arity n => a -> ContVec n a
- replicateM :: forall (n :: Nat) f a. (Arity n, Applicative f) => f a -> f (ContVec n a)
- generate :: forall (n :: Nat) a. Arity n => (Int -> a) -> ContVec n a
- generateM :: forall f (n :: Nat) a. (Applicative f, Arity n) => (Int -> f a) -> f (ContVec n a)
- unfoldr :: forall (n :: Nat) b a. Arity n => (b -> (a, b)) -> b -> ContVec n a
- basis :: forall a (n :: Nat). (Num a, Arity n) => Int -> ContVec n a
- empty :: ContVec 0 a
- cons :: forall (n :: Nat) a. Arity n => a -> ContVec n a -> ContVec (n + 1) a
- consV :: forall (n :: Nat) a. Arity n => ContVec 1 a -> ContVec n a -> ContVec (n + 1) a
- snoc :: forall (n :: Nat) a. Arity n => a -> ContVec n a -> ContVec (n + 1) a
- concat :: forall (n :: Nat) (k :: Nat) a. (Arity n, Arity k, Arity (n + k), Peano (n + k) ~ Add (Peano n) (Peano k)) => ContVec n a -> ContVec k a -> ContVec (n + k) a
- mk1 :: a -> ContVec 1 a
- mk2 :: a -> a -> ContVec 2 a
- mk3 :: a -> a -> a -> ContVec 3 a
- mk4 :: a -> a -> a -> a -> ContVec 4 a
- mk5 :: a -> a -> a -> a -> a -> ContVec 5 a
- mk6 :: a -> a -> a -> a -> a -> a -> ContVec 6 a
- mk7 :: a -> a -> a -> a -> a -> a -> a -> ContVec 7 a
- mk8 :: a -> a -> a -> a -> a -> a -> a -> a -> ContVec 8 a
- map :: forall (n :: Nat) a b. Arity n => (a -> b) -> ContVec n a -> ContVec n b
- imap :: forall (n :: Nat) a b. Arity n => (Int -> a -> b) -> ContVec n a -> ContVec n b
- mapM :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (a -> f b) -> ContVec n a -> f (ContVec n b)
- imapM :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (Int -> a -> f b) -> ContVec n a -> f (ContVec n b)
- mapM_ :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (a -> f b) -> ContVec n a -> f ()
- imapM_ :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (Int -> a -> f b) -> ContVec n a -> f ()
- scanl :: forall (n :: Nat) b a. Arity n => (b -> a -> b) -> b -> ContVec n a -> ContVec (n + 1) b
- scanl1 :: forall (n :: Nat) a. Arity n => (a -> a -> a) -> ContVec n a -> ContVec n a
- sequence :: forall (n :: Nat) f a. (Arity n, Applicative f) => ContVec n (f a) -> f (ContVec n a)
- sequence_ :: forall (n :: Nat) f a. (Arity n, Applicative f) => ContVec n (f a) -> f ()
- distribute :: forall f (n :: Nat) a. (Functor f, Arity n) => f (ContVec n a) -> ContVec n (f a)
- collect :: forall f (n :: Nat) a b. (Functor f, Arity n) => (a -> ContVec n b) -> f a -> ContVec n (f b)
- tail :: forall (n :: Nat) a. Arity n => ContVec (n + 1) a -> ContVec n a
- reverse :: forall (n :: Nat) a. Arity n => ContVec n a -> ContVec n a
- zipWith :: forall (n :: Nat) a b c. Arity n => (a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c
- zipWith3 :: forall (n :: Nat) a b c d. Arity n => (a -> b -> c -> d) -> ContVec n a -> ContVec n b -> ContVec n c -> ContVec n d
- izipWith :: forall (n :: Nat) a b c. Arity n => (Int -> a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c
- izipWith3 :: forall (n :: Nat) a b c d. Arity n => (Int -> a -> b -> c -> d) -> ContVec n a -> ContVec n b -> ContVec n c -> ContVec n d
- zipWithM :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (a -> b -> f c) -> ContVec n a -> ContVec n b -> f (ContVec n c)
- zipWithM_ :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (a -> b -> f c) -> ContVec n a -> ContVec n b -> f ()
- izipWithM :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (Int -> a -> b -> f c) -> ContVec n a -> ContVec n b -> f (ContVec n c)
- izipWithM_ :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (Int -> a -> b -> f c) -> ContVec n a -> ContVec n b -> f ()
- head :: forall (n :: Nat) a. (Arity n, 1 <= n) => ContVec n a -> a
- index :: forall (n :: Nat) a. Arity n => Int -> ContVec n a -> a
- element :: forall (n :: Nat) f a. (Arity n, Functor f) => Int -> (a -> f a) -> ContVec n a -> f (ContVec n a)
- vector :: forall v a (n :: Nat). (Vector v a, Dim v ~ n) => ContVec n a -> v a
- foldl :: forall (n :: Nat) b a. Arity n => (b -> a -> b) -> b -> ContVec n a -> b
- foldl1 :: forall (n :: Nat) a. (Arity n, 1 <= n) => (a -> a -> a) -> ContVec n a -> a
- foldr :: forall (n :: Nat) a b. Arity n => (a -> b -> b) -> b -> ContVec n a -> b
- ifoldl :: forall (n :: Nat) b a. Arity n => (b -> Int -> a -> b) -> b -> ContVec n a -> b
- ifoldr :: forall (n :: Nat) a b. Arity n => (Int -> a -> b -> b) -> b -> ContVec n a -> b
- foldM :: forall (n :: Nat) m b a. (Arity n, Monad m) => (b -> a -> m b) -> b -> ContVec n a -> m b
- ifoldM :: forall (n :: Nat) m b a. (Arity n, Monad m) => (b -> Int -> a -> m b) -> b -> ContVec n a -> m b
- sum :: forall a (n :: Nat). (Num a, Arity n) => ContVec n a -> a
- minimum :: forall a (n :: Nat). (Ord a, Arity n, 1 <= n) => ContVec n a -> a
- maximum :: forall a (n :: Nat). (Ord a, Arity n, 1 <= n) => ContVec n a -> a
- and :: forall (n :: Nat). Arity n => ContVec n Bool -> Bool
- or :: forall (n :: Nat). Arity n => ContVec n Bool -> Bool
- all :: forall (n :: Nat) a. Arity n => (a -> Bool) -> ContVec n a -> Bool
- any :: forall (n :: Nat) a. Arity n => (a -> Bool) -> ContVec n a -> Bool
- find :: forall (n :: Nat) a. Arity n => (a -> Bool) -> ContVec n a -> Maybe a
- gfoldl :: forall c v a. (Vector v a, Data a) => (forall x y. Data x => c (x -> y) -> x -> c y) -> (forall x. x -> c x) -> v a -> c (v a)
- gunfold :: forall con c v a. (Vector v a, Data a) => (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> con -> c (v a)
Type-level 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
type family Add (n :: PeanoNum) (m :: PeanoNum) :: PeanoNum where ... Source #
Type family for sum of unary natural numbers.
N-ary functions
type family Fn (n :: PeanoNum) a b where ... Source #
Type family for n-ary functions. n
is number of parameters of
type a
and b
is result type.
newtype Fun (n :: PeanoNum) a b Source #
Newtype wrapper which is used to make Fn
injective. It's also a
reader monad.
Instances
ArityPeano n => Applicative (Fun n a) Source # | |
ArityPeano n => Functor (Fun n a) Source # | |
ArityPeano n => Monad (Fun n a) Source # | |
type Arity (n :: Nat) = (ArityPeano (Peano n), KnownNat n, Peano (n + 1) ~ 'S (Peano n)) Source #
Type class for type level number for which we can defined operations over N-ary functions.
class ArityPeano (n :: PeanoNum) where Source #
Type class for handling n-ary functions.
Methods
Arguments
:: (forall (k :: PeanoNum). t ('S k) -> a -> t k) | Fold function |
-> (t 'Z -> b) | Extract result of fold |
-> t n | Initial value |
-> Fun n a b | Reduction function |
Left fold over n elements exposed as n-ary function. These elements are supplied as arguments to the function.
Arguments
:: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) | Get value to apply to function |
-> t n | Initial value |
-> (CVecPeano n a, t 'Z) |
Apply all parameters to the function.
Arguments
:: Applicative f | |
=> (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) | Get value to apply to function |
-> t n | Initial value |
-> (f (CVecPeano n a), t 'Z) |
Apply all parameters to the function using monadic actions. Note that for identity monad it's same as applyFun. Ignoring newtypes:
forall b. Fn n a b -> b ~ ContVec n a
reverseF :: Fun n a b -> Fun n a b Source #
Reverse order of parameters. It's implemented directly in type
class since expressing it in terms of accum
will require
putting ArityPeano constraint on step funcion
gunfoldF :: Data a => (forall b x. Data b => c (b -> x) -> c x) -> T_gunfold c r a n -> c r Source #
Worker function for gunfold
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 # applyFun :: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t 'Z -> (CVecPeano 'Z a, t 'Z) Source # applyFunM :: Applicative f => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t 'Z -> (f (CVecPeano 'Z a), t 'Z) Source # reverseF :: Fun 'Z a b -> Fun 'Z a b Source # gunfoldF :: Data a => (forall b x. Data b => c (b -> x) -> c x) -> T_gunfold c r a 'Z -> c 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 # applyFun :: (forall (k :: PeanoNum). t ('S k) -> (a, t k)) -> t ('S n) -> (CVecPeano ('S n) a, t 'Z) Source # applyFunM :: Applicative f => (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) -> t ('S n) -> (f (CVecPeano ('S n) a), t 'Z) Source # reverseF :: Fun ('S n) a b -> Fun ('S n) a b Source # gunfoldF :: Data a => (forall b x. Data b => c (b -> x) -> c x) -> T_gunfold c r a ('S n) -> c r Source # |
Arguments
:: forall (n :: Nat) t a. Arity n | |
=> (forall (k :: PeanoNum). t ('S k) -> (a, t k)) | Get value to apply to function |
-> t (Peano n) | Initial value |
-> ContVec n a | N-ary function |
Apply all parameters to the function.
Arguments
:: forall f (n :: Nat) t a. (Applicative f, Arity n) | |
=> (forall (k :: PeanoNum). t ('S k) -> (f a, t k)) | Get value to apply to function |
-> t (Peano n) | Initial value |
-> f (ContVec n a) |
Apply all parameters to the function using applicative actions.
Combinators
constFun :: forall (n :: PeanoNum) a b. Fun n a b -> Fun ('S n) a b Source #
Prepend ignored parameter to function
curryFirst :: forall (n :: PeanoNum) a b. Fun ('S n) a b -> a -> Fun n a b Source #
Curry first parameter of n-ary function
uncurryFirst :: forall a (n :: PeanoNum) b. (a -> Fun n a b) -> Fun ('S n) a b Source #
Uncurry first parameter of n-ary function
curryLast :: forall (n :: PeanoNum) a b. ArityPeano n => Fun ('S n) a b -> Fun n a (a -> b) Source #
Curry last parameter of n-ary function
curryMany :: forall (n :: PeanoNum) (k :: PeanoNum) a b. ArityPeano n => Fun (Add n k) a b -> Fun n a (Fun k a b) Source #
Curry n first parameters of n-ary function
apLast :: forall (n :: PeanoNum) a b. ArityPeano n => Fun ('S n) a b -> a -> Fun n a b Source #
Apply last parameter to function. Unlike apFun
we need to
traverse all parameters but last hence Arity
constraint.
shuffleFun :: forall (n :: PeanoNum) b a r. ArityPeano n => (b -> Fun n a r) -> Fun n a (b -> r) Source #
Move function parameter to the result of N-ary function.
withFun :: forall (n :: PeanoNum) a b. (Fun n a b -> Fun n a b) -> Fun ('S n) a b -> Fun ('S n) a b Source #
Recursive step for the function
Vector type class
type family Dim (v :: Type -> Type) :: Nat Source #
Size of vector expressed as type-level natural.
Instances
class Arity (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 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 (Peano (Dim v)) a (v a) Source #
N-ary function for creation of vectors.
inspect :: v a -> Fun (Peano (Dim v)) a b -> b Source #
Deconstruction of vector.
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 Only a Source # | |
Vector Identity a Source # | |
Vector (Empty :: Type -> Type) a Source # | |
Arity n => Vector (VecList n) a Source # | |
Arity n => Vector (Vec n) a Source # | |
Arity n => Vector (ContVec n) a Source # | |
(Arity n, Prim a) => Vector (Vec n) a Source # | |
(Arity n, Storable a) => Vector (Vec n) a Source # | |
Unbox n a => Vector (Vec n) a Source # | |
Vector (Proxy :: Type -> Type) 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 |
(b ~ a, c ~ a) => Vector ((,,) b c) a Source # | |
(b ~ a, c ~ a, d ~ a) => Vector ((,,,) b c d) a Source # | |
(b ~ a, c ~ a, d ~ a, e ~ a) => Vector ((,,,,) b c d e) a 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 # | |
class (Vector (v n) a, Dim (v n) ~ n) => VectorN (v :: Nat -> Type -> Type) (n :: Nat) a Source #
Vector parametrized by length. In ideal world it should be:
forall n. (Arity n, Vector (v n) a, Dim (v n) ~ n) => VectorN v a
Alas polymorphic constraints aren't allowed in haskell.
Instances
Arity n => VectorN VecList n a Source # | |
Defined in Data.Vector.Fixed | |
Arity n => VectorN Vec n a Source # | |
Defined in Data.Vector.Fixed.Boxed | |
Arity n => VectorN ContVec n a Source # | |
Defined in Data.Vector.Fixed.Cont | |
(Arity n, Prim a) => VectorN Vec n a Source # | |
Defined in Data.Vector.Fixed.Primitive | |
(Arity n, Storable a) => VectorN Vec n a Source # | |
Defined in Data.Vector.Fixed.Storable | |
Unbox n a => VectorN Vec n a Source # | |
Defined in Data.Vector.Fixed.Unboxed |
length :: KnownNat (Dim v) => v a -> Int Source #
Length of vector. Function doesn't evaluate its argument.
Vector as continuation
newtype ContVec (n :: Nat) a Source #
Vector represented as continuation. Alternative wording: it's Church encoded N-element vector.
Instances
Arity n => VectorN ContVec n a Source # | |
Defined in Data.Vector.Fixed.Cont | |
Arity n => Applicative (ContVec n) Source # | |
Arity n => Functor (ContVec n) Source # | |
Arity n => Foldable (ContVec n) Source # | |
Defined in Data.Vector.Fixed.Cont Methods fold :: Monoid m => ContVec n m -> m # foldMap :: Monoid m => (a -> m) -> ContVec n a -> m # foldMap' :: Monoid m => (a -> m) -> ContVec n a -> m # foldr :: (a -> b -> b) -> b -> ContVec n a -> b # foldr' :: (a -> b -> b) -> b -> ContVec n a -> b # foldl :: (b -> a -> b) -> b -> ContVec n a -> b # foldl' :: (b -> a -> b) -> b -> ContVec n a -> b # foldr1 :: (a -> a -> a) -> ContVec n a -> a # foldl1 :: (a -> a -> a) -> ContVec n a -> a # toList :: ContVec n a -> [a] # length :: ContVec n a -> Int # elem :: Eq a => a -> ContVec n a -> Bool # maximum :: Ord a => ContVec n a -> a # minimum :: Ord a => ContVec n a -> a # | |
Arity n => Traversable (ContVec n) Source # | |
Defined in Data.Vector.Fixed.Cont | |
Arity n => Vector (ContVec n) a Source # | |
type Dim (ContVec n) Source # | |
Defined in Data.Vector.Fixed.Cont |
newtype CVecPeano (n :: PeanoNum) a Source #
Same as ContVec
but its length is expressed as Peano number.
consPeano :: forall a (n :: PeanoNum). a -> CVecPeano n a -> CVecPeano ('S n) a Source #
Cons values to the CVecPeano
.
runContVec :: forall (n :: Nat) a r. Fun (Peano n) a r -> ContVec n a -> r Source #
Run continuation vector. It's same as inspect
but with
arguments flipped.
Construction of ContVec
cvec :: forall v a (n :: Nat). (Vector v a, Dim v ~ n) => v a -> ContVec n a Source #
Convert regular vector to continuation based one.
fromList :: forall (n :: Nat) a. Arity n => [a] -> ContVec n a Source #
Convert list to continuation-based vector. Will throw error if list is shorter than resulting vector.
fromList' :: forall (n :: Nat) a. Arity n => [a] -> ContVec n a Source #
Same as fromList
bu throws error is list doesn't have same
length as vector.
fromListM :: forall (n :: Nat) a. Arity n => [a] -> Maybe (ContVec n a) Source #
Convert list to continuation-based vector. Will fail with
Nothing
if list doesn't have right length.
replicate :: forall (n :: Nat) a. Arity n => a -> ContVec n a Source #
Execute monadic action for every element of vector. Synonym for pure
.
replicateM :: forall (n :: Nat) f a. (Arity n, Applicative f) => f a -> f (ContVec n a) Source #
Execute monadic action for every element of vector.
generate :: forall (n :: Nat) a. Arity n => (Int -> a) -> ContVec n a Source #
Generate vector from function which maps element's index to its value.
generateM :: forall f (n :: Nat) a. (Applicative f, Arity n) => (Int -> f a) -> f (ContVec n a) Source #
Generate vector from monadic function which maps element's index to its value.
unfoldr :: forall (n :: Nat) b a. Arity n => (b -> (a, b)) -> b -> ContVec n a Source #
Unfold vector.
basis :: forall a (n :: Nat). (Num a, Arity n) => Int -> ContVec n a Source #
Unit vector along Nth axis.
Constructors
cons :: forall (n :: Nat) a. Arity n => a -> ContVec n a -> ContVec (n + 1) a Source #
O(1) Prepend element to vector
consV :: forall (n :: Nat) a. Arity n => ContVec 1 a -> ContVec n a -> ContVec (n + 1) a Source #
Prepend single element vector to another vector.
snoc :: forall (n :: Nat) a. Arity n => a -> ContVec n a -> ContVec (n + 1) a Source #
O(1) Append element to vector
concat :: forall (n :: Nat) (k :: Nat) a. (Arity n, Arity k, Arity (n + k), Peano (n + k) ~ Add (Peano n) (Peano k)) => ContVec n a -> ContVec k a -> ContVec (n + k) a Source #
Concatenate vector
Transformations
map :: forall (n :: Nat) a b. Arity n => (a -> b) -> ContVec n a -> ContVec n b Source #
Map over vector. Synonym for fmap
imap :: forall (n :: Nat) a b. Arity n => (Int -> a -> b) -> ContVec n a -> ContVec n b Source #
Apply function to every element of the vector and its index.
mapM :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (a -> f b) -> ContVec n a -> f (ContVec n b) Source #
Effectful map over vector.
imapM :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (Int -> a -> f b) -> ContVec n a -> f (ContVec n b) Source #
Apply monadic function to every element of the vector and its index.
mapM_ :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (a -> f b) -> ContVec n a -> f () Source #
Apply monadic action to each element of vector and ignore result.
imapM_ :: forall (n :: Nat) f a b. (Arity n, Applicative f) => (Int -> a -> f b) -> ContVec n a -> f () Source #
Apply monadic action to each element of vector and its index and ignore result.
scanl :: forall (n :: Nat) b a. Arity n => (b -> a -> b) -> b -> ContVec n a -> ContVec (n + 1) b Source #
Left scan over vector
scanl1 :: forall (n :: Nat) a. Arity n => (a -> a -> a) -> ContVec n a -> ContVec n a Source #
Left scan over vector
sequence :: forall (n :: Nat) f a. (Arity n, Applicative f) => ContVec n (f a) -> f (ContVec n a) Source #
Evaluate every action in the vector from left to right.
sequence_ :: forall (n :: Nat) f a. (Arity n, Applicative f) => ContVec n (f a) -> f () Source #
Evaluate every action in the vector from left to right and ignore result.
distribute :: forall f (n :: Nat) a. (Functor f, Arity n) => f (ContVec n a) -> ContVec n (f a) Source #
The dual of sequenceA
collect :: forall f (n :: Nat) a b. (Functor f, Arity n) => (a -> ContVec n b) -> f a -> ContVec n (f b) Source #
tail :: forall (n :: Nat) a. Arity n => ContVec (n + 1) a -> ContVec n a Source #
O(1) Tail of vector.
reverse :: forall (n :: Nat) a. Arity n => ContVec n a -> ContVec n a Source #
Reverse order of elements in the vector
Zips
zipWith :: forall (n :: Nat) a b c. Arity n => (a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c Source #
Zip two vector together using function.
zipWith3 :: forall (n :: Nat) a b c d. Arity n => (a -> b -> c -> d) -> ContVec n a -> ContVec n b -> ContVec n c -> ContVec n d Source #
Zip three vectors together
izipWith :: forall (n :: Nat) a b c. Arity n => (Int -> a -> b -> c) -> ContVec n a -> ContVec n b -> ContVec n c Source #
Zip two vector together using function which takes element index as well.
izipWith3 :: forall (n :: Nat) a b c d. Arity n => (Int -> a -> b -> c -> d) -> ContVec n a -> ContVec n b -> ContVec n c -> ContVec n d Source #
Zip three vectors together
zipWithM :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (a -> b -> f c) -> ContVec n a -> ContVec n b -> f (ContVec n c) Source #
Zip two vector together using monadic function.
zipWithM_ :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (a -> b -> f c) -> ContVec n a -> ContVec n b -> f () Source #
izipWithM :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (Int -> a -> b -> f c) -> ContVec n a -> ContVec n b -> f (ContVec n c) Source #
Zip two vector together using monadic function which takes element index as well..
izipWithM_ :: forall (n :: Nat) f a b c. (Arity n, Applicative f) => (Int -> a -> b -> f c) -> ContVec n a -> ContVec n b -> f () Source #
Getters
head :: forall (n :: Nat) a. (Arity n, 1 <= n) => ContVec n a -> a Source #
Finalizer function for getting head of the vector.
index :: forall (n :: Nat) a. Arity n => Int -> ContVec n a -> a Source #
O(n) Get value at specified index.
element :: forall (n :: Nat) f a. (Arity n, Functor f) => Int -> (a -> f a) -> ContVec n a -> f (ContVec n a) Source #
Twan van Laarhoven lens for continuation based vector
Vector construction
vector :: forall v a (n :: Nat). (Vector v a, Dim v ~ n) => ContVec n a -> v a Source #
Convert continuation to the vector.
Folds
foldl :: forall (n :: Nat) b a. Arity n => (b -> a -> b) -> b -> ContVec n a -> b Source #
Left fold over continuation vector.
foldl1 :: forall (n :: Nat) a. (Arity n, 1 <= n) => (a -> a -> a) -> ContVec n a -> a Source #
Left fold.
foldr :: forall (n :: Nat) a b. Arity n => (a -> b -> b) -> b -> ContVec n a -> b Source #
Right fold over continuation vector
ifoldl :: forall (n :: Nat) b a. Arity n => (b -> Int -> a -> b) -> b -> ContVec n a -> b Source #
Left fold over continuation vector.
ifoldr :: forall (n :: Nat) a b. Arity n => (Int -> a -> b -> b) -> b -> ContVec n a -> b Source #
Right fold over continuation vector
foldM :: forall (n :: Nat) m b a. (Arity n, Monad m) => (b -> a -> m b) -> b -> ContVec n a -> m b Source #
Monadic left fold over continuation vector.
ifoldM :: forall (n :: Nat) m b a. (Arity n, Monad m) => (b -> Int -> a -> m b) -> b -> ContVec n a -> m b Source #
Monadic left fold over continuation vector.
Special folds
sum :: forall a (n :: Nat). (Num a, Arity n) => ContVec n a -> a Source #
Sum all elements in the vector.
minimum :: forall a (n :: Nat). (Ord a, Arity n, 1 <= n) => ContVec n a -> a Source #
Minimal element of vector.
maximum :: forall a (n :: Nat). (Ord a, Arity n, 1 <= n) => ContVec n a -> a Source #
Maximal element of vector.
and :: forall (n :: Nat). Arity n => ContVec n Bool -> Bool Source #
Conjunction of elements of a vector.
or :: forall (n :: Nat). Arity n => ContVec n Bool -> Bool Source #
Disjunction of all elements of a vector.
all :: forall (n :: Nat) a. Arity n => (a -> Bool) -> ContVec n a -> Bool Source #
Determines whether all elements of vector satisfy predicate.
any :: forall (n :: Nat) a. Arity n => (a -> Bool) -> ContVec n a -> Bool Source #
Determines whether any of element of vector satisfy predicate.