It seems straightforward, uncontroversial, and useful to implement certain arithmetic operations on `FunctionData`: - [ ] Multiplication by a scalar: `(c * f)(x) = c * f(x)` - [ ] Addition with another `FunctionData` of the same type: `(f + g)(x) = f(x) + g(x)` - [ ] Addition with a scalar??: `(f + c)(x) = f(x) + c` This could then be bubbled up through the cost struct layers of abstraction to the `ProductionVariableCostCurve` level.