Since the earliest days of programming, symbolic algebra has been a laboratory for the development of functional programming. The talk will cover a bit of this history to explain basic aspects of the library: which data structures are used (and why), and the design choices made to allow symbolic expressions work smoothly with ordinary arithmetic expressions. A particular strength of the library is its ability to work with non-commuting objects (for example, matrices); how this was done will be discussed.
Another key goal of Wheeler is extensibility, allowing users to add their own mathematical objects. The talk will show how this runs smack into the so-called "Expression Problem". The second half of the talk will look at a couple approaches to solving the expression problem, seeing how close we can get to the goal of extending the library while still understanding our code.
To show this isn't all just blowing smoke, the Wheeler library will be demonstrated on a hard real-world problem. As an added bonus, at no extra charge, the talk will be (mercifully) almost monad free!