///|
/// A feedback law: the input to apply for a reference and a measurement.
///
/// The combinators in `control` (cascade, saturation, rate limiting) take any
/// `&Controller`, so a controller written outside this library composes the same
/// way the ones here do.
pub(open) trait Controller {
///|
/// The input for one control period of `dt` seconds.
fn update(
Self,
reference : @linear.Vec,
measurement : @linear.Vec,
dt : Double,
) -> @linear.Vec
///|
/// Drop the accumulated state (an integrator, a stored derivative) and start
/// again from the next measurement.
fn reset(Self) -> Unit
}