linear-grammar

A simple grammar for building linear equations and inclusive inequalities.

Latest on Hackage:0.0.2.1

This package is not currently in any snapshots. If you're interested in using it, we recommend adding it to Stackage Nightly. Doing so will make builds more reliable, and allow stackage.org to host generated Haddocks.

BSD-3-Clause licensed and maintained by Athan Clark

This library provides some simple tools for building abstract syntax trees, representing linear equations and (inclusive) inequalities. As an example:

12x + 3y - 4z + 12 <= 43x - 7b + 8q

Would look like...

f = (12 :: Rational) .*. EVar "x" .+.
    (3 :: Rational) .*. EVar "y" .+.
    (-4 :: Rational) .*. EVar "z" .+.
    ELit 12
    .<=.
    (43 :: Rational) .*. EVar "x" .+.
    (-7 :: Rational) .*. EVar "b" .+.
    (8 :: Rational) .*. EVar "q"

I've added some overloading functionality, to help ease the verbosity of the above statements - an IsString instance, and some other utilities. To pack the equation into standard form, use the sandardForm function:

stdF = standardForm f