//@ run-pass | |
//@ compile-flags: -Zmir-opt-level=3 | |
trait IterExt: Iterator { | |
fn fold_ex<B, F>(mut self, init: B, mut f: F) -> B | |
where | |
Self: Sized, | |
F: FnMut(B, Self::Item) -> B, | |
{ | |
let mut accum = init; | |
while let Some(x) = self.next() { | |
accum = f(accum, x); | |
} | |
accum | |
} | |
} | |
impl<T: Iterator> IterExt for T {} | |
fn main() { | |
let test = &["\n"]; | |
test.iter().fold_ex(String::new(), |_, b| b.to_string()); | |
} |