-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Typesafe library for linear algebra -- -- Please see the README on GitHub at -- https://github.com/JuniorGarbageCollector/QLinear @package qlinear @version 0.1.0.0 module QLinear.Constructor.Matrix -- | Macro constructor for Matrix -- --
-- >>> [matrix| 1 2; 3 4 |] -- [1,2] -- [3,4] -- -- >>> :t [matrix| 1 2; 3 4|] -- [matrix| 1 2; 3 4|] :: Num a => Matrix 2 2 a --matrix :: QuasiQuoter -- | Macro constructor for Vector. -- --
-- >>> [vector| 1 2 3 4 |] -- [1] -- [2] -- [3] -- [4] -- -- >>> :t [vector| 1 2 3 4 |] -- [vector| 1 2 3 4 |] :: Num a => Vector 4 a --vector :: QuasiQuoter module QLinear.Identity -- | Polymirphic identity matrix -- -- Identity matrix can udjust to other matrix with known size. If size is -- unknown, just set it yourself -- --
-- >>> e :: Identity 4 Int -- [1,0,0,0] -- [0,1,0,0] -- [0,0,1,0] -- [0,0,0,1] -- -- >>> e ~+~ [matrix| 1 2; 3 4 |] -- [2,2] -- [3,5] --e :: forall n a. (KnownNat n, HasIdentity a) => Identity n a type Identity n a = Matrix n n a class HasIdentity a zero :: HasIdentity a => a one :: HasIdentity a => a instance GHC.Num.Num a => QLinear.Identity.HasIdentity a module QLinear.Constructor.Operator -- | Macro constructor for operator -- --
-- >>> [operator| (x, y) => (y, x) |] -- [0,1] -- [1,0] -- -- >>> [operator| (x, y) => (2 * x, y + x) |] ~*~ [vector| 3 4 |] -- [6] -- [7] ---- -- Do note,constructor doesn't prove linearity. It just builds -- matrix of given operator. operator :: QuasiQuoter module QLinear.Index -- | Typesafe index. To construct it use TypeApplications -- --
-- >>> Index @1 @3 -- Index 1 3 -- -- >>> :t Index @1 @3 -- Index @1 @3 :: Index 1 3 --data Index (i :: Nat) (j :: Nat) Index :: Index instance (GHC.TypeNats.KnownNat i, GHC.TypeNats.KnownNat j) => GHC.Show.Show (QLinear.Index.Index i j) module QLinear.Integration.Linear.From class FromLinear m where { type family Q m :: *; } fromLinear :: FromLinear m => m -> Q m instance QLinear.Integration.Linear.From.FromLinear (Linear.V1.V1 (Linear.V1.V1 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V1.V1 (Linear.V2.V2 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V1.V1 (Linear.V3.V3 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V1.V1 (Linear.V4.V4 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V2.V2 (Linear.V1.V1 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V2.V2 (Linear.V2.V2 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V2.V2 (Linear.V3.V3 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V2.V2 (Linear.V4.V4 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V3.V3 (Linear.V1.V1 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V3.V3 (Linear.V2.V2 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V3.V3 (Linear.V3.V3 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V3.V3 (Linear.V4.V4 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V4.V4 (Linear.V1.V1 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V4.V4 (Linear.V2.V2 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V4.V4 (Linear.V3.V3 a)) instance QLinear.Integration.Linear.From.FromLinear (Linear.V4.V4 (Linear.V4.V4 a)) module QLinear.Integration.Linear.To class ToLinear m where { type family L m :: *; } toLinear :: ToLinear m => m -> L m instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 1 1 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 1 2 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 1 3 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 1 4 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 2 1 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 2 2 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 2 3 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 2 4 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 3 1 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 3 2 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 3 3 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 3 4 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 4 1 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 4 2 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 4 3 a) instance QLinear.Integration.Linear.To.ToLinear (Internal.Matrix.Matrix 4 4 a) module QLinear.Matrix data Matrix (m :: Nat) (n :: Nat) a type Vector n a = Matrix n 1 a size :: Integral b => Matrix m n a -> (b, b) value :: Matrix m n a -> [[a]] module QLinear.Operations -- | Length of vector -- --
-- >>> length [vector| 3 4 |] -- 5.0 -- -- >>> length [vector| 1 1 |] -- 1.4142135623730951 --length :: (Real a, Floating b) => Vector n a -> b -- | Generalized matrices multiplication mulMatricesWith :: (a -> b -> c) -> (c -> c -> c) -> Matrix m n a -> Matrix n k b -> Matrix m k c -- | Nagates all elements of matrix -- --
-- >>> neg [matrix| 1 2 3 |] -- [-1,-2,-3] --neg :: Num a => Matrix m n a -> Matrix m n a -- | Transposes matrix -- --
-- >>> transpose [matrix| 1 2 3; 4 5 6 |] -- [1,4] -- [2,5] -- [3,6] --transpose :: Matrix m n a -> Matrix n m a -- | Generalized matrices addition zipMatricesWith :: (a -> b -> c) -> Matrix m n a -> Matrix m n b -> Matrix m n c -- | Determinant of matrix -- --
-- >>> det [matrix| 1 0; 0 1|] -- 1 -- -- >>> det [matrix| 1 3; 4 2|] -- -10 --det :: Num a => Matrix n n a -> a -- | Typesafe algebraic complement -- -- To use it you have to know i and j at compile time -- --
-- >>> algebraicComplement [matrix| 1 2; 3 4 |] (Index @1 @1) -- 4 -- -- >>> algebraicComplement [matrix| 1 2 3; 4 5 6; 7 8 9 |] (Index @1 @1) -- -3 --algebraicComplement :: forall n a i j. (KnownNat i, KnownNat j, KnownNat n, Num a, i <= n, j <= n) => Matrix n n a -> Index i j -> a -- | Algebraic complement. -- -- Use it if you don't know indices at compile time -- --
-- >>> algebraicComplement' [matrix| 1 2; 3 4 |] (1, 1) -- Just 4 ---- --
-- >>> algebraicComplement' [matrix| 1 2; 3 4 |] (34, 43) -- Nothing ---- --
-- >>> algebraicComplement' [matrix| 1 2 3; 4 5 6; 7 8 9 |] (1, 1) -- Just (-3) --algebraicComplement' :: Num a => Matrix n n a -> (Int, Int) -> Maybe a -- | Adjugate matrix -- --
-- >>> adjugate [matrix| 1 2; 3 4|] -- [4,-2] -- [-3,1] --adjugate :: Num a => Matrix n n a -> Matrix n n a -- | Inverted matrix -- --
-- >>> inverted [matrix| 1 2; 3 4|] -- Just [-2.0,1.0] -- [1.5,-0.5] -- -- >>> inverted [matrix| 1 4; 1 4|] -- Nothing --inverted :: forall a b n. (Fractional b, Eq a, Real a) => Matrix n n a -> Maybe (Matrix n n b) -- | Multuplies all elements of matrix m by k -- --
-- >>> 5 *~ [matrix| 1 2 3; 4 5 6 |] -- [5,10,15] -- [20,25,30] --(*~) :: Num a => a -> Matrix m n a -> Matrix m n a -- | Multiplies two matrix -- --
-- >>> [matrix| 1 2; 3 4 |] ~*~ [matrix| 1; 2 |] -- [5] -- [11] --(~*~) :: Num a => Matrix m n a -> Matrix n k a -> Matrix m k a -- | Adds a to all elements of matrix m -- --
-- >>> [matrix| 1 2 3 |] ~+ 8 -- [9,10,11] --(~+) :: Num a => Matrix m n a -> a -> Matrix m n a -- | Flipped ~+ :) (+~) :: Num a => a -> Matrix m n a -> Matrix m n a -- | Adds two matrices -- --
-- >>> [matrix| 1 2 |] ~+~ [matrix| 2 3 |] -- [3,5] --(~+~) :: Num a => Matrix m n a -> Matrix m n a -> Matrix m n a -- | Substracts second matrix from first one -- --
-- >>> [matrix| 1 2 3 |] ~-~ [matrix| 3 2 1 |] -- [-2,0,2] --(~-~) :: Num a => Matrix m n a -> Matrix m n a -> Matrix m n a module QLinear