pub trait Foldable<'a, A> {
fn foldr<B, F>(self, f: F, init: B) -> B
where
F: Fn(A, B) -> B + 'a;
fn foldr_ref<B, F>(&'a self, f: F, init: B) -> B
where
A: 'a,
F: Fn(&'a A, B) -> B + 'a;
fn foldl<B, F>(self, f: F, init: B) -> B
where
F: Fn(B, A) -> B + 'a;
fn foldl_ref<B, F>(&'a self, f: F, init: B) -> B
where
A: 'a,
F: Fn(B, &'a A) -> B + 'a;
fn fold_map<F, M>(self, f: F) -> M
where
F: Fn(A) -> M + 'a,
M: Monoid;
}