use super::Reductor;
pub trait Reduce: Iterator + Sized {
#[inline]
fn reduce_with<R>(self) -> R
where
R: Reductor<Self::Item>,
R::State: Default,
{
let state = R::State::default();
R::into_result(self.fold(state, R::reduce))
}
#[inline]
fn fold_with<R, I>(self, init: I) -> R
where
R: Reductor<Self::Item>,
R::State: From<I>,
{
R::into_result(self.fold(init.into(), R::reduce))
}
}
impl<I> Reduce for I where I: Iterator {}