pub fn reduce<R, M, F>(matrix: M, f: F) -> Option<R::Item> where M: IntoIterator<Item = R>, R: IntoIterator, M::IntoIter: Iterator<Item = R>, R::IntoIter: Iterator<Item = R::Item>, F: FnMut(R::Item, R::Item) -> R::Item,