# linear

Linear Algebra http://github.com/ekmett/linear/

Version on this page: | 1.20.5 |

LTS Haskell 9.1: | 1.20.7 |

Stackage Nightly 2017-08-19: | 1.20.7 |

Latest on Hackage: | 1.20.7 |

**Edward A. Kmett**

**Edward A. Kmett**

#### Module documentation for 1.20.5

## Changes

## 1.20.7

Support

`semigroupoids-5.2.1`

and`doctest-0.12`

## 1.20.6

- Revamp
`Setup.hs`

to use`cabal-doctest`

. This makes it build with`Cabal-2.0`

, and makes the`doctest`

s work with`cabal new-build`

and sandboxes. - Make
`(1 / x)`

and`recip x`

agree in the`Fractional`

instance for`Quaternion`

- Use newtype instances for
`Point`

vectors in`Linear.Affine`

- Enable
`PolyKinds`

in`Linear.Trace`

. Also enable`PolyKinds`

when GHC 7.6 or later is used (previously, it was GHC 7.8 or later). - Fix a segfault arising from the
`MVector`

instance for`V`

- Add
`Finite`

class for conversion between`V`

and fixed-size vector types

## 1.20.5

- GHC 8 compatibility
- Fixed the
`perspective`

calculation.

## 1.20.4

Compatibility with

`base-orphans`

0.5

## 1.20.3

- Support
`vector`

0.11.0.0. - Support
`cereal`

0.5 - You can now unboxed vectors of
`V n`

vectors.

## 1.20.2

- Modified the
`doctest`

machinery to work with`stack`

and builds to non-standard locations. - Removed the local
`.ghci`

file. - Various numerical stability improvements were made to the quaternion and projection functions.

## 1.20.1

- Fixed doctests broken by the previous change.
- Unboxed vector instances for various linear data types now use unpacked integers even on older GHCs.

## 1.20

`inv22`

,`inv33`

and`inv44`

no longer attempt an epsilon check. They no longer return a`Maybe`

result as a consequence. You should filter for the 0 determinant case yourself.

## 1.19.1.3

`vector`

0.11.0.0 support

## 1.19.1.2

Fix GHC 7.4.

## 1.19.1.1

Proper

`reflection`

2 support

## 1.19.1

`reflection`

2 support

## 1.19

Change the Ixed instance for

`Linear.V`

to use`Int`

as the index type. This makes`V n`

a*lot*easier to use.

## 1.18.3

Compile warning-free on GHC 7.10.

## 1.18.2

Added

`NFData`

instance for`Point`

## 1.18.1

- Added an
`-f-template-haskell`

option to allow disabling`template-haskell`

support. This is an unsupported configuration but may be useful for expert users in sandbox configurations. - Added lenses for extracting corner various sub-matrices e.g.
`_m22`

,`_m33`

## 1.18.0.2

Fixed builds on even older GHCs.

## 1.18.0.1

- Fixed the test suite.
- Fixed builds on older GHCs.

## 1.18

- Consolidated
`eye2`

..`eye4`

into a single`identity`

combinator. - Fixed the
`Data`

instance`V n a`

for GHC 7.10-RC3.

## 1.17.1.1

`filepath`

1.4 support

## 1.17.1

- Added support for
`Data.Functor.Classes`

from`transformers`

0.5 via`transformers-compat`

. - Added missing support for
`binary`

,`bytes`

and`cereal`

for`Point`

## 1.17

Better support for

`binary`

. Added support for`bytes`

and`cereal`

## 1.16.4

`ortho`

and`inverseOrtho`

now only require a`Fractional`

constraint.- Added missing
`Floating`

instances.

## 1.16.3

Improve the performance of

`fromQuaternion`

,`mkTransformation`

,`mkTransformationMat`

,`basisFor`

,`scaled`

by using implementations that inline well for functions that were previously reference implementations.

## 1.16.2

- Added
`NFData`

instances for the various vector types. - Added
`!!/`

operator for matrix division by scalar.

## 1.16.1

Added

`Trace`

instance for`V1`

.

## 1.16

Renamed

`kronecker`

to`scaled`

.

## 1.15.5

- Added
`Metric`

instances for`[]`

,`ZipList`

,`Maybe`

- Added
`det44`

and`inv44`

to`Linear.Matrix`

- Added
`Data`

instance for`Point`

## 1.15.4

Added Typeable and Data instances for V

## 1.15.3

Added missing

`FunctorWithIndex`

,`FoldableWithIndex`

and`TraversableWithIndex Int (V n)`

instances for`V`

## 1.15.2

- Added
`frustum`

, analogous to the old`glFrustum`

call. - Added
`inverseInfinitePerspective`

,`inverseOrtho`

,`inverseFrustum`

.

## 1.15.1

Added

`inversePerspective`

. It is much more accurate to compute it directly than to compute an inverse.

## 1.15.0.1

Fixed build failures caused by

`Linear`

re-exporting the old name.

## 1.15

- Renamed
`Linear.Perspective`

to`Linear.Projection`

. - Fixed a build issue with GHC HEAD.

## 1.14.0.1

Fixed test failures caused by 1.14

## 1.14

Moved

`Coincides`

to`Linear.Plucker.Coincides`

. The constructors`Line`

and`Ray`

oft collided with user code.

## 1.13

Switched 'ortho' to follow the OpenGL handedness.

## 1.12.1

Added "swizzle" lenses

**e.g.**`_yzx`

, which are useful for working with libraries like`gl`

.

## 1.12

- Added 'transpose'
- Added missing 'Mxy' matrices up to 4 dimensions -- they were commonly reimplemented by users.

## 1.11.3

Fixed an issue with

`UndecidableInstances`

on GHC 7.6.3

## 1.11.2

Added

`Linear.Perspective`

.

## 1.11.1

Added

`_Point`

,`relative`

and a few instances for`Point`

.

## 1.11

Changed the 'representation' of

`V n`

from`E (V n)`

, which was hard to use, to`Int`

, which is a bit too permissive, but is easy to use.

## 1.10.1

Added

`Linear.V2.angle`

.

## 1.10

Added

`Hashable`

instances.

## 1.9.1

Added a role annotation to

`V n a`

to prevent users from using GHC 7.8's`Coercible`

machinery to violate invariants.

## 1.9.0.1

Fixed a broken build

## 1.9

- Added
`MonadZip`

instances. - Added
`MonadFix`

instances. - Added
`Control.Lens.Each.Each`

instances

## 1.8.1

Bugfixed

`slerp`

## 1.8

Added missing

`Unbox`

instances for working with unboxed vectors of`linear`

data types.

## 1.7

- Fixed
`axisAngle`

`unit`

now has a rank 1 type.

## 1.5

`lens`

4 compatibility

## 1.4

Renamed

`incore`

to`column`

and added an example.

## 1.3.1.1

Build bugfix

## 1.3.1

- Better implementations of
`basis`

and`basisFor`

. - Derived Generic instances.

## 1.2

Improved matrix multiplication to properly support the sparse/sparse case.

## 1.1.4

Marked modules

`Trustworthy`

as necessary.

## 1.1.2

Dependency bump for

`reflection`

compatibility

## 1.1.1

Fixed an infinite loop in the default definition of

`liftI2`

.

## 1.1

Added

`Additive`

instances for`[]`

,`Maybe`

and`Vector`

.

## 1.0

- Strict vectors
- Exported
`mkTransformationMat`

- Bumped dependency bounds

## 0.9.1 [bug fix]

Exported

`Linear.V0`

!

## 0.9

Added sparse vector support.

## 0.8

Added

`Linear.V0`

## 0.7

- Added
`Linear.Instances`

- More documentation

## 0.6

- Removed the direct dependency on
`lens`

. - Added
`Linear.Core`

to cover vector spaces as corepresentable functors.

## 0.5

Added

`Ix`

instances for`V2`

,`V3`

, and`V4`

## 0.4.2.2

Removed the upper bound on

`distributive`

## 0.2

- Initial hackage release