pub trait Foldable: Kind_cdc7cd43dac7585f {
// Provided methods
fn fold_right<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> B
where Func: Fn(A, B) -> B + 'a,
FnBrand: CloneableFn + 'a { ... }
fn fold_left<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> B
where Func: Fn(B, A) -> B + 'a,
FnBrand: CloneableFn + 'a { ... }
fn fold_map<'a, FnBrand, A: 'a + Clone, M, Func>(
func: Func,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> M
where M: Monoid + 'a,
Func: Fn(A) -> M + 'a,
FnBrand: CloneableFn + 'a { ... }
}Expand description
A type class for structures that can be folded to a single value.
A Foldable represents a structure that can be folded over to combine its elements
into a single result.
§Minimal Implementation
A minimal implementation of Foldable requires implementing either Foldable::fold_right or Foldable::fold_map.
- If
Foldable::fold_rightis implemented,Foldable::fold_mapandFoldable::fold_leftare derived from it. - If
Foldable::fold_mapis implemented,Foldable::fold_rightis derived from it, andFoldable::fold_leftis derived from the derivedFoldable::fold_right.
Note that Foldable::fold_left is not sufficient on its own because the default implementations of Foldable::fold_right and Foldable::fold_map do not depend on it.
Provided Methods§
Sourcefn fold_right<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(A, B) -> B + 'a,
FnBrand: CloneableFn + 'a,
fn fold_right<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(A, B) -> B + 'a,
FnBrand: CloneableFn + 'a,
Folds the structure by applying a function from right to left.
This method performs a right-associative fold of the structure.
§Type Signature
forall self a b. Foldable self => ((a, b) -> b, b, self a) -> b
§Type Parameters
'a: The lifetime of the elements.FnBrand: The brand of the cloneable function to use.A: The type of the elements in the structure.B: The type of the accumulator.Func: The type of the folding function.
§Parameters
func: The function to apply to each element and the accumulator.initial: The initial value of the accumulator.fa: The structure to fold.
§Returns
The final accumulator value.
§Examples
use fp_library::{brands::*, functions::*};
let x = Some(5);
let y = fold_right::<RcFnBrand, OptionBrand, _, _, _>(|a, b| a + b, 10, x);
assert_eq!(y, 15);Sourcefn fold_left<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(B, A) -> B + 'a,
FnBrand: CloneableFn + 'a,
fn fold_left<'a, FnBrand, A: 'a + Clone, B: 'a, Func>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(B, A) -> B + 'a,
FnBrand: CloneableFn + 'a,
Folds the structure by applying a function from left to right.
This method performs a left-associative fold of the structure.
§Type Signature
forall self a b. Foldable self => ((b, a) -> b, b, self a) -> b
§Type Parameters
'a: The lifetime of the elements.FnBrand: The brand of the cloneable function to use.A: The type of the elements in the structure.B: The type of the accumulator.Func: The type of the folding function.
§Parameters
func: The function to apply to the accumulator and each element.initial: The initial value of the accumulator.fa: The structure to fold.
§Returns
The final accumulator value.
§Examples
use fp_library::{brands::*, functions::*};
let x = Some(5);
let y = fold_left::<RcFnBrand, OptionBrand, _, _, _>(|b, a| b + a, 10, x);
assert_eq!(y, 15);Sourcefn fold_map<'a, FnBrand, A: 'a + Clone, M, Func>(
func: Func,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> M
fn fold_map<'a, FnBrand, A: 'a + Clone, M, Func>( func: Func, fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>, ) -> M
Maps values to a monoid and combines them.
This method maps each element of the structure to a monoid and then combines the results using the monoid’s append operation.
§Type Signature
forall self a m. (Foldable self, Monoid m) => (a -> m, self a) -> m
§Type Parameters
'a: The lifetime of the elements.FnBrand: The brand of the cloneable function to use.A: The type of the elements in the structure.M: The type of the monoid.Func: The type of the mapping function.
§Parameters
func: The function to map each element to a monoid.fa: The structure to fold.
§Returns
The combined monoid value.
§Examples
use fp_library::{brands::*, functions::*};
let x = Some(5);
let y = fold_map::<RcFnBrand, OptionBrand, _, _, _>(|a: i32| a.to_string(), x);
assert_eq!(y, "5".to_string());Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.