-- | Common library for algebraic structures. Has the advantage of automatically inferring lots of useful structure, especially
-- in the writing of linear programs. For example, here are several ways of writing @3 x - 4 y + z@:
--
-- > gsum [3 *& x, (-4) *^ var y, var z]
-- > linCombination [(3, x), (-4, y), (1, z)]
-- > 3 *& x ^-^ 4 *& y ^+^ var z
--
-- In addition, if we have two functions @f@ and @g@, we can construct linear combinations of those functions, using
-- exactly the same syntax. Moreover, we can multiply functions with 'Double' coefficients by 'Rational' values successfully.
-- This module is intended to offer as much generality as possible without getting in your way.
module Data.Algebra (
-- * Algebraic structures
Group(..),
Ring(..),
Module(..),
Poly,
varPoly,
GroupRing,
LinFunc,
-- * Algebraic functions
gsum,
combination,
evalPoly,
-- ** Specialized methods on linear functions
var,
varSum,
(*&),
linCombination) where
import Data.Algebra.Group
import Data.Algebra.Ring
import Data.Algebra.Module