# Abstract algebra for Rust
[](https://travis-ci.org/brendanzab/algebra)
~~~
Abstract algebra organises organises a wide range of structures into
a logically consistent framework. These classifications can be incredibly useful
for creating composable libraries and APIs.
Examples of types that could be included under the algebraic framework:
- Integers, reals and rationals numbers
- Complex numbers
- Polynomials
- Boolean values
- Matrices and vectors
- Quaternions and octonians
- Strings under concatenation
## Research
### Interesting papers
- [The Scratchpad II Type System: Domains and Subdomains](http://www.csd.uwo.ca/~watt/pub/reprints/1990-miola-spadtypes.pdf)
- [Fundamental Algebraic Concepts in Concept-Enabled C++](ftp://cgi.cs.indiana.edu/pub/techreports/TR638.pdf)
### Inspiring Libraries
- [Numeric Prelude](http://www.haskell.org/haskellwiki/Numeric_Prelude) (Haskell)
- Edward A. Kmett's [algebra package](http://hackage.haskell.org/package/algebra-3.1) (Haskell)
- [YAP: Yet Another Prelude](http://hackage.haskell.org/package/yap) (Haskell)
- Agda's [algebra module](http://www.cse.chalmers.se/~nad/listings/lib-0.7/Algebra.html) (Agda)
- Idris' [algebra module](https://github.com/idris-lang/Idris-dev/blob/master/libs/prelude/Prelude/Algebra.idr) (Idris)
- Felix's [algebra module](http://felix-lang.org/$/usr/local/lib/felix/felix-latest/share/lib/std/algebraic.flx) (Felix)
- [non/spire](https://github.com/non/spire) (Scala)