use cmp::Ordering;
use ops::Try;
-use super::{AlwaysOk, LoopState};
+use super::LoopState;
use super::{Chain, Cycle, Cloned, Enumerate, Filter, FilterMap, Fuse};
use super::{Flatten, FlatMap, flatten_compat};
use super::{Inspect, Map, Peekable, Scan, Skip, SkipWhile, StepBy, Take, TakeWhile, Rev};
fn fold<B, F>(mut self, init: B, mut f: F) -> B where
Self: Sized, F: FnMut(B, Self::Item) -> B,
{
- self.try_fold(init, move |acc, x| AlwaysOk(f(acc, x))).0
+ self.try_fold(init, move |acc, x| Ok::<B, !>(f(acc, x))).unwrap()
}
/// Tests if every element of the iterator matches a predicate.
mod sources;
mod traits;
-/// Transparent newtype used to implement foo methods in terms of try_foo.
-/// Important until #43278 is fixed; might be better as `Result<T, !>` later.
-struct AlwaysOk<T>(pub T);
-
-impl<T> Try for AlwaysOk<T> {
- type Ok = T;
- type Error = !;
- #[inline]
- fn into_result(self) -> Result<Self::Ok, Self::Error> { Ok(self.0) }
- #[inline]
- fn from_error(v: Self::Error) -> Self { v }
- #[inline]
- fn from_ok(v: Self::Ok) -> Self { AlwaysOk(v) }
-}
-
/// Used to make try_fold closures more like normal loops
#[derive(PartialEq)]
enum LoopState<C, B> {
use ops::{Mul, Add, Try};
use num::Wrapping;
-use super::{AlwaysOk, LoopState};
+use super::LoopState;
/// Conversion from an `Iterator`.
///
fn rfold<B, F>(mut self, accum: B, mut f: F) -> B where
Self: Sized, F: FnMut(B, Self::Item) -> B,
{
- self.try_rfold(accum, move |acc, x| AlwaysOk(f(acc, x))).0
+ self.try_rfold(accum, move |acc, x| Ok::<B, !>(f(acc, x))).unwrap()
}
/// Searches for an element of an iterator from the back that satisfies a predicate.