## Vector space bases via type families

A basis *B* of a vector space *V* is a subset *B* of *V*, such that the elements of *B* are linearly independent and span *V*. That is to say, every element (vector) of *V* is a linear combination of elements of *B*, and no element of *B* is a linear combination of the other elements of *B*. Moreover, every basis determines a unique decomposition of any member of *V* into coordinates relative to *B*.

This post gives a simple Haskell implementation for a canonical basis of a vector space, and a means of decomposing vectors into coordinates. It uses [indexed type families] (associated types), and is quite general, despite its simplicity.

The Haskell module described here is part of the vector-space library (version 0.4 or later), which available on Hackage and a darcs repository. See the wiki page, interface documentation, and source code. The library version described below (0.5 or later) relies on ghc 6.10.

**Edits**:

- 2008-11-09: Tweaked comment above about version.
- 2008-02-09: just fiddling around