# Abstract algebra for Rust [![Build Status](https://travis-ci.org/brendanzab/algebra.png?branch=master)](https://travis-ci.org/brendanzab/algebra) ~~~ |(• ◡•)|ノ〵(❍ᴥ❍⋃) - "ALGEBRAIC!!!" ~~~ 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)