use num_traits::Float;
pub trait Reduce<T: Float> {
type Target;
fn reduce(&self) -> Self::Target;
}
impl<T, U> Reduce<T> for (U, U)
where
T: Float,
U: Reduce<T>,
{
type Target = (<U as Reduce<T>>::Target, <U as Reduce<T>>::Target);
#[inline]
fn reduce(&self) -> Self::Target {
(self.0.reduce(), self.1.reduce())
}
}