numhask-0.1.1: A numeric prelude

Safe HaskellNone
LanguageHaskell2010

NumHask.Vector

Contents

Description

Two classes are supplied:

  • A Vector class, with fixed-length n, where shape is held at the type level.
  • A SomeVector class, with fixed-length, where shape is held at the value level.

Synopsis

Documentation

newtype Vector n a Source #

A one-dimensional array where shape is specified at the type level The main purpose of this, beyond safe-typing, is to supply the Representable instance with an initial object. A boxed Vector is used under the hood.

Constructors

Vector 

Fields

Instances

Functor (Vector n) Source # 

Methods

fmap :: (a -> b) -> Vector n a -> Vector n b #

(<$) :: a -> Vector n b -> Vector n a #

KnownNat n => Applicative (Vector n) Source # 

Methods

pure :: a -> Vector n a #

(<*>) :: Vector n (a -> b) -> Vector n a -> Vector n b #

(*>) :: Vector n a -> Vector n b -> Vector n b #

(<*) :: Vector n a -> Vector n b -> Vector n a #

Foldable (Vector n) Source # 

Methods

fold :: Monoid m => Vector n m -> m #

foldMap :: Monoid m => (a -> m) -> Vector n a -> m #

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

foldr' :: (a -> b -> b) -> b -> Vector n a -> b #

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

foldl' :: (b -> a -> b) -> b -> Vector n a -> b #

foldr1 :: (a -> a -> a) -> Vector n a -> a #

foldl1 :: (a -> a -> a) -> Vector n a -> a #

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

null :: Vector n a -> Bool #

length :: Vector n a -> Int #

elem :: Eq a => a -> Vector n a -> Bool #

maximum :: Ord a => Vector n a -> a #

minimum :: Ord a => Vector n a -> a #

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

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

Traversable (Vector n) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> Vector n a -> f (Vector n b) #

sequenceA :: Applicative f => Vector n (f a) -> f (Vector n a) #

mapM :: Monad m => (a -> m b) -> Vector n a -> m (Vector n b) #

sequence :: Monad m => Vector n (m a) -> m (Vector n a) #

KnownNat n => Distributive (Vector n) Source # 

Methods

distribute :: Functor f => f (Vector n a) -> Vector n (f a) #

collect :: Functor f => (a -> Vector n b) -> f a -> Vector n (f b) #

distributeM :: Monad m => m (Vector n a) -> Vector n (m a) #

collectM :: Monad m => (a -> Vector n b) -> m a -> Vector n (m b) #

KnownNat n => Representable (Vector n) Source # 

Associated Types

type Rep (Vector n :: * -> *) :: * #

Methods

tabulate :: (Rep (Vector n) -> a) -> Vector n a #

index :: Vector n a -> Rep (Vector n) -> a #

Eq1 (Vector n) Source # 

Methods

liftEq :: (a -> b -> Bool) -> Vector n a -> Vector n b -> Bool #

KnownNat n => HasShape (Vector n) Source # 

Associated Types

type Shape (Vector n :: * -> *) :: * Source #

Methods

shape :: Vector n a -> Shape (Vector n) Source #

(Semiring a, KnownNat n) => Hilbert (Vector n) a Source # 

Methods

(<.>) :: Vector n a -> Vector n a -> a Source #

(KnownNat n, AdditiveUnital a) => IsList (Vector n a) Source #

pads with zeros if needed

Associated Types

type Item (Vector n a) :: * #

Methods

fromList :: [Item (Vector n a)] -> Vector n a #

fromListN :: Int -> [Item (Vector n a)] -> Vector n a #

toList :: Vector n a -> [Item (Vector n a)] #

Eq a => Eq (Vector n a) Source # 

Methods

(==) :: Vector n a -> Vector n a -> Bool #

(/=) :: Vector n a -> Vector n a -> Bool #

(Show a, KnownNat n) => Show (Vector n a) Source # 

Methods

showsPrec :: Int -> Vector n a -> ShowS #

show :: Vector n a -> String #

showList :: [Vector n a] -> ShowS #

(KnownNat n, Arbitrary a, AdditiveUnital a) => Arbitrary (Vector n a) Source # 

Methods

arbitrary :: Gen (Vector n a) #

shrink :: Vector n a -> [Vector n a] #

(KnownNat n, AdditiveGroup a) => AdditiveGroup (Vector n a) Source # 

Methods

(-) :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, Additive a) => Additive (Vector n a) Source # 

Methods

(+) :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, AdditiveInvertible a) => AdditiveInvertible (Vector n a) Source # 

Methods

negate :: Vector n a -> Vector n a Source #

(KnownNat n, AdditiveCommutative a) => AdditiveCommutative (Vector n a) Source # 
(KnownNat n, AdditiveAssociative a) => AdditiveAssociative (Vector n a) Source # 
(KnownNat n, AdditiveUnital a) => AdditiveUnital (Vector n a) Source # 

Methods

zero :: Vector n a Source #

(KnownNat n, AdditiveMagma a) => AdditiveMagma (Vector n a) Source # 

Methods

plus :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, MultiplicativeGroup a) => MultiplicativeGroup (Vector n a) Source # 

Methods

(/) :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, Multiplicative a) => Multiplicative (Vector n a) Source # 

Methods

(*) :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, MultiplicativeInvertible a) => MultiplicativeInvertible (Vector n a) Source # 

Methods

recip :: Vector n a -> Vector n a Source #

(KnownNat n, MultiplicativeCommutative a) => MultiplicativeCommutative (Vector n a) Source # 
(KnownNat n, MultiplicativeAssociative a) => MultiplicativeAssociative (Vector n a) Source # 
(KnownNat n, MultiplicativeUnital a) => MultiplicativeUnital (Vector n a) Source # 

Methods

one :: Vector n a Source #

(KnownNat n, MultiplicativeMagma a) => MultiplicativeMagma (Vector n a) Source # 

Methods

times :: Vector n a -> Vector n a -> Vector n a Source #

(KnownNat n, MultiplicativeMagma a, Additive a) => Distribution (Vector n a) Source # 
(KnownNat n, CRing a) => CRing (Vector n a) Source # 
(KnownNat n, Ring a) => Ring (Vector n a) Source # 
(KnownNat n, Semiring a) => Semiring (Vector n a) Source # 
(KnownNat n, BoundedField a) => BoundedField (Vector n a) Source # 
(KnownNat n, ExpField a) => ExpField (Vector n a) Source # 

Methods

exp :: Vector n a -> Vector n a Source #

log :: Vector n a -> Vector n a Source #

logBase :: Vector n a -> Vector n a -> Vector n a Source #

(**) :: Vector n a -> Vector n a -> Vector n a Source #

sqrt :: Vector n a -> Vector n a Source #

(KnownNat n, Field a) => Field (Vector n a) Source # 
(KnownNat n, Epsilon a) => Epsilon (Vector n a) Source # 
(KnownNat n, Signed a) => Signed (Vector n a) Source # 

Methods

sign :: Vector n a -> Vector n a Source #

abs :: Vector n a -> Vector n a Source #

(KnownNat n, Integral a) => Integral (Vector n a) Source # 

Methods

div :: Vector n a -> Vector n a -> Vector n a Source #

mod :: Vector n a -> Vector n a -> Vector n a Source #

divMod :: Vector n a -> Vector n a -> (Vector n a, Vector n a) Source #

(KnownNat n, ExpField a) => Metric (Vector n a) a Source # 

Methods

distance :: Vector n a -> Vector n a -> a Source #

ExpField a => Normed (Vector n a) a Source # 

Methods

size :: Vector n a -> a Source #

type Rep (Vector n) Source # 
type Rep (Vector n) = Int
type Shape (Vector n) Source # 
type Shape (Vector n) = Int
type Item (Vector n a) Source # 
type Item (Vector n a) = a

data SomeVector a Source #

a one-dimensional array where shape is specified at the value level

Constructors

SomeVector Int (Vector a) 

Instances

Functor SomeVector Source # 

Methods

fmap :: (a -> b) -> SomeVector a -> SomeVector b #

(<$) :: a -> SomeVector b -> SomeVector a #

Foldable SomeVector Source # 

Methods

fold :: Monoid m => SomeVector m -> m #

foldMap :: Monoid m => (a -> m) -> SomeVector a -> m #

foldr :: (a -> b -> b) -> b -> SomeVector a -> b #

foldr' :: (a -> b -> b) -> b -> SomeVector a -> b #

foldl :: (b -> a -> b) -> b -> SomeVector a -> b #

foldl' :: (b -> a -> b) -> b -> SomeVector a -> b #

foldr1 :: (a -> a -> a) -> SomeVector a -> a #

foldl1 :: (a -> a -> a) -> SomeVector a -> a #

toList :: SomeVector a -> [a] #

null :: SomeVector a -> Bool #

length :: SomeVector a -> Int #

elem :: Eq a => a -> SomeVector a -> Bool #

maximum :: Ord a => SomeVector a -> a #

minimum :: Ord a => SomeVector a -> a #

sum :: Num a => SomeVector a -> a #

product :: Num a => SomeVector a -> a #

HasShape SomeVector Source # 

Associated Types

type Shape (SomeVector :: * -> *) :: * Source #

IsList (SomeVector a) Source # 

Associated Types

type Item (SomeVector a) :: * #

Eq a => Eq (SomeVector a) Source # 

Methods

(==) :: SomeVector a -> SomeVector a -> Bool #

(/=) :: SomeVector a -> SomeVector a -> Bool #

Ord a => Ord (SomeVector a) Source # 
Show a => Show (SomeVector a) Source # 
Arbitrary a => Arbitrary (SomeVector a) Source # 
type Shape SomeVector Source # 
type Item (SomeVector a) Source # 
type Item (SomeVector a) = a

Conversion

someVector :: KnownNat r => Vector (r :: Nat) a -> SomeVector a Source #

convert from a Vector to a SomeVector

unsafeToVector :: SomeVector a -> Vector (r :: Nat) a Source #

convert from a SomeVector to a Vector with no shape check

toVector :: forall a r. KnownNat r => SomeVector a -> Maybe (Vector (r :: Nat) a) Source #

convert from a SomeVector to a Vector, checking shape

Arbitrary

newtype ShapeV Source #

ShapeV is used to generate sensible lengths for arbitrary instances of SomeVector and SomeMatrix

Constructors

ShapeV 

Fields