# QLinear QLinear is type safe library for linear algebra based on `"macro-constructors"` ## Constructors: * matrix > ```[matrix| a b ; c d |]``` builds matrix __2x2__ `[ [a, b], [c, d] ]` Example: ```haskell [matrix| 1 2; 3 4 |] ~+~ [matrix| 2 3; 4 5 |] == [matrix| 3 5; 7 9 |] ``` > Also you can't, for example, add two matrix with different size. ```haskell [matrix| 1 2; 3 4 |] ~+~ [matrix| 1 2 3; 4 5 6; 7 8 9 |] -- will not be compiled ``` * vector > ```[vector| a b c d |]``` builds matrix __4x1__ `[ [a], [b], [c], [d] ]` * operator > ```[operator| (x, y) => (y, x) |]``` builds matrix __2x2__ of operator `[ [0, 1], [1, 0] ]` that swaps coodrinates > ```[operator| (x, y) => (2 * x, y) |]``` builds matrix __2x2__ of operator `[ [2, 0], [0, 1] ]` that doubles `x` coordinate Example: ```haskell [operator| (x, y) => (3 * y, x / 2) |] ~*~ [vector| 2 8 |] == [vector| 24 1 |] ``` ## Syntax: * matrix: `val11 val12 .. val1n; val21 val22 .. val2n; ..; valm1 valm2 .. valmn ` * vector: `val1 val2 .. valn` * operator: `(var1, var2, .., varn) => (exp1, exp2, .., expn)` where * `val` is `number literal`, `variable` or `any Haskell expression` between `(` and `)` * `var` is Haskell variable * `exp` is any Haskell expression --- Also there are basic operations as determinant, transposition, etc.