Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- type VectorSpace scalar a = (Field scalar, Module scalar a, Group a)
- type VectorR v = (Applicative v, Traversable v)
- class VectorR v => InnerProdSpace v where
- data VZero a = VZero
- data VNext v a = VNext !(v a) !a
- type V1' = VNext VZero
- type V2' = VNext V1'
- type V3' = VNext V2'
- pattern V1' :: a -> V1' a
- pattern V2' :: forall a. a -> a -> V2' a
- pattern V3' :: forall a. a -> a -> a -> V3' a
- newtype Euclid f a = Euclid {
- fromEuclid :: f a
- type V3 = Euclid V3'
- type V2 = Euclid V2'
- pattern V2 :: forall a. a -> a -> Euclid V2' a
- pattern V3 :: forall a. a -> a -> a -> Euclid V3' a
- pureMat :: (Applicative v, Applicative w) => s -> Mat s v w
- (⊙) :: Applicative v => Multiplicative s => v s -> v s -> v s
- (·) :: Field s => InnerProdSpace v => v s -> v s -> s
- sqNorm :: Field s => InnerProdSpace v => v s -> s
- norm :: Field s => InnerProdSpace v => Floating s => v s -> s
- normalize :: VectorSpace s (v s) => Floating s => InnerProdSpace v => v s -> v s
- (×) :: Ring a => V3 a -> V3 a -> V3 a
- index :: Applicative v => Traversable v => v Int
- type SqMat v s = Mat s v v
- newtype Mat s w v = Mat {
- fromMat :: w (v s)
- newtype Flat w v s = Flat {
- fromFlat :: w (v s)
- flatMat :: Mat s w v -> Flat w v s
- matFlat :: Flat w v s -> Mat s w v
- type Mat3x3 s = SqMat V3 s
- type Mat2x2 s = SqMat V2 s
- pattern Mat2x2 :: forall s. s -> s -> s -> s -> Mat s V2 V2
- pattern Mat3x3 :: forall s. s -> s -> s -> s -> s -> s -> s -> s -> s -> Mat s V3 V3
- (*<) :: (Functor f, Multiplicative b) => b -> f b -> f b
- (<+>) :: (Applicative f, Additive b) => f b -> f b -> f b
- matVecMul :: forall s v w. (Ring s, Foldable v, Applicative v, Applicative w) => Mat s v w -> v s -> w s
- rotation2d :: (Group a, Floating a) => a -> Mat2x2 a
- crossProductMatrix :: Group a => V3 a -> Mat3x3 a
- (⊗) :: (Applicative v, Applicative w, Multiplicative s) => w s -> v s -> Mat s w v
- tensorWith :: (Applicative v, Applicative w) => (s -> t -> u) -> w s -> v t -> Mat u v w
- identity :: Traversable v => Ring s => Applicative v => SqMat v s
- diagonal :: Traversable v => Ring s => Applicative v => v s -> SqMat v s
- rotation3d :: Ring a => Floating a => a -> V3 a -> Mat3x3 a
- rotationFromTo :: (Floating a, Module a a, Field a) => V3 a -> V3 a -> Mat3x3 a
- transpose :: Applicative g => Traversable f => Mat a f g -> Mat a g f
- matMul :: (Traversable u, Ring s, Applicative w, Applicative v, Applicative u) => Mat s u w -> Mat s v u -> Mat s v w
- newtype OrthoMat v s = OrthoMat (SqMat v s)
Documentation
type VectorR v = (Applicative v, Traversable v) Source #
Representation of vector as traversable functor
class VectorR v => InnerProdSpace v where Source #
Instances
Functor (VZero :: Type -> Type) Source # | |
Applicative (VZero :: Type -> Type) Source # | |
Foldable (VZero :: Type -> Type) Source # | |
Defined in Algebra.Linear fold :: Monoid m => VZero m -> m # foldMap :: Monoid m => (a -> m) -> VZero a -> m # foldr :: (a -> b -> b) -> b -> VZero a -> b # foldr' :: (a -> b -> b) -> b -> VZero a -> b # foldl :: (b -> a -> b) -> b -> VZero a -> b # foldl' :: (b -> a -> b) -> b -> VZero a -> b # foldr1 :: (a -> a -> a) -> VZero a -> a # foldl1 :: (a -> a -> a) -> VZero a -> a # elem :: Eq a => a -> VZero a -> Bool # maximum :: Ord a => VZero a -> a # minimum :: Ord a => VZero a -> a # | |
Traversable (VZero :: Type -> Type) Source # | |
Eq (VZero a) Source # | |
Ord (VZero a) Source # | |
Show (VZero a) Source # | |
VNext !(v a) !a |
Instances
Functor v => Functor (VNext v) Source # | |
Applicative v => Applicative (VNext v) Source # | |
Foldable v => Foldable (VNext v) Source # | |
Defined in Algebra.Linear fold :: Monoid m => VNext v m -> m # foldMap :: Monoid m => (a -> m) -> VNext v a -> m # foldr :: (a -> b -> b) -> b -> VNext v a -> b # foldr' :: (a -> b -> b) -> b -> VNext v a -> b # foldl :: (b -> a -> b) -> b -> VNext v a -> b # foldl' :: (b -> a -> b) -> b -> VNext v a -> b # foldr1 :: (a -> a -> a) -> VNext v a -> a # foldl1 :: (a -> a -> a) -> VNext v a -> a # elem :: Eq a => a -> VNext v a -> Bool # maximum :: Ord a => VNext v a -> a # minimum :: Ord a => VNext v a -> a # | |
Traversable v => Traversable (VNext v) Source # | |
(Eq a, Eq (v a)) => Eq (VNext v a) Source # | |
(Ord a, Ord (v a)) => Ord (VNext v a) Source # | |
Defined in Algebra.Linear | |
(Show a, Show (v a)) => Show (VNext v a) Source # | |
Make a Euclidean vector out of a traversable functor. (The p)
Euclid | |
|
Instances
pureMat :: (Applicative v, Applicative w) => s -> Mat s v w Source #
(⊙) :: Applicative v => Multiplicative s => v s -> v s -> v s Source #
Hadamard product
(·) :: Field s => InnerProdSpace v => v s -> v s -> s Source #
sqNorm :: Field s => InnerProdSpace v => v s -> s Source #
normalize :: VectorSpace s (v s) => Floating s => InnerProdSpace v => v s -> v s Source #
(×) :: Ring a => V3 a -> V3 a -> V3 a Source #
Cross product in 3 dimensions https://en.wikipedia.org/wiki/Cross_product
index :: Applicative v => Traversable v => v Int Source #
Matrix type. (w s) is a column. (v s) is a row.
Instances
(Applicative f, Applicative g, Module s a) => Module s (Mat a f g) Source # | |
Ring s => Category (Mat s :: (Type -> Type) -> (Type -> Type) -> Type) Source # | |
Show (w (v s)) => Show (Mat s w v) Source # | |
(Applicative f, Applicative g, Group a) => Group (Mat a f g) Source # | |
(Applicative f, Applicative g, AbelianAdditive a) => AbelianAdditive (Mat a f g) Source # | |
Defined in Algebra.Linear | |
(Applicative f, Applicative g, Additive a) => Additive (Mat a f g) Source # | |
View of the matrix as a composition of functors.
Instances
(Functor w, Functor v) => Functor (Flat w v) Source # | |
(Applicative w, Applicative v) => Applicative (Flat w v) Source # | |
(Foldable w, Foldable v) => Foldable (Flat w v) Source # | |
Defined in Algebra.Linear fold :: Monoid m => Flat w v m -> m # foldMap :: Monoid m => (a -> m) -> Flat w v a -> m # foldr :: (a -> b -> b) -> b -> Flat w v a -> b # foldr' :: (a -> b -> b) -> b -> Flat w v a -> b # foldl :: (b -> a -> b) -> b -> Flat w v a -> b # foldl' :: (b -> a -> b) -> b -> Flat w v a -> b # foldr1 :: (a -> a -> a) -> Flat w v a -> a # foldl1 :: (a -> a -> a) -> Flat w v a -> a # elem :: Eq a => a -> Flat w v a -> Bool # maximum :: Ord a => Flat w v a -> a # minimum :: Ord a => Flat w v a -> a # | |
Show (w (v s)) => Show (Flat w v s) Source # | |
(*<) :: (Functor f, Multiplicative b) => b -> f b -> f b infixr 7 Source #
Vector scaling. If Module a (f a), then (*^) must be the same as (*<).
(<+>) :: (Applicative f, Additive b) => f b -> f b -> f b Source #
matVecMul :: forall s v w. (Ring s, Foldable v, Applicative v, Applicative w) => Mat s v w -> v s -> w s Source #
(⊗) :: (Applicative v, Applicative w, Multiplicative s) => w s -> v s -> Mat s w v Source #
Tensor product
tensorWith :: (Applicative v, Applicative w) => (s -> t -> u) -> w s -> v t -> Mat u v w Source #
identity :: Traversable v => Ring s => Applicative v => SqMat v s Source #
diagonal :: Traversable v => Ring s => Applicative v => v s -> SqMat v s Source #
rotationFromTo :: (Floating a, Module a a, Field a) => V3 a -> V3 a -> Mat3x3 a Source #
3d rotation mapping the direction of from
to that of to
transpose :: Applicative g => Traversable f => Mat a f g -> Mat a g f Source #
matMul :: (Traversable u, Ring s, Applicative w, Applicative v, Applicative u) => Mat s u w -> Mat s v u -> Mat s v w Source #
Instances
(Ring s, Applicative v, Traversable v) => Division (OrthoMat v s) Source # | |
(Ring s, Applicative v, Traversable v) => Multiplicative (OrthoMat v s) Source # | |