pub trait Foldable: Kind_cdc7cd43dac7585f {
// Provided methods
fn fold_right<'a, FnBrand, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> B
where Func: Fn(A, B) -> B + 'a,
FnBrand: ClonableFn + 'a { ... }
fn fold_left<'a, FnBrand, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> B
where Func: Fn(B, A) -> B + 'a,
FnBrand: ClonableFn + 'a { ... }
fn fold_map<'a, FnBrand, Func, A: 'a + Clone, M>(
func: Func,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> M
where M: Monoid + 'a,
Func: Fn(A) -> M + 'a,
FnBrand: ClonableFn + '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, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(A, B) -> B + 'a,
FnBrand: ClonableFn + 'a,
fn fold_right<'a, FnBrand, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(A, B) -> B + 'a,
FnBrand: ClonableFn + '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 a b. Foldable f => ((a, b) -> b, b, f a) -> b
§Type Parameters
FnBrand: The brand of the clonable function to use.Func: The type of the folding function.A: The type of the elements in the structure.B: The type of the accumulator.
§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::classes::foldable::Foldable;
use fp_library::brands::OptionBrand;
use fp_library::brands::RcFnBrand;
let x = Some(5);
let y = OptionBrand::fold_right::<RcFnBrand, _, _, _>(|a, b| a + b, 10, x);
assert_eq!(y, 15);Sourcefn fold_left<'a, FnBrand, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(B, A) -> B + 'a,
FnBrand: ClonableFn + 'a,
fn fold_left<'a, FnBrand, Func, A: 'a + Clone, B: 'a>(
func: Func,
initial: B,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> Bwhere
Func: Fn(B, A) -> B + 'a,
FnBrand: ClonableFn + '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 a b. Foldable f => ((b, a) -> b, b, f a) -> b
§Type Parameters
FnBrand: The brand of the clonable function to use.Func: The type of the folding function.A: The type of the elements in the structure.B: The type of the accumulator.
§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::classes::foldable::Foldable;
use fp_library::brands::OptionBrand;
use fp_library::brands::RcFnBrand;
let x = Some(5);
let y = OptionBrand::fold_left::<RcFnBrand, _, _, _>(|b, a| b + a, 10, x);
assert_eq!(y, 15);Sourcefn fold_map<'a, FnBrand, Func, A: 'a + Clone, M>(
func: Func,
fa: <Self as Kind_cdc7cd43dac7585f>::Of<'a, A>,
) -> M
fn fold_map<'a, FnBrand, Func, A: 'a + Clone, M>( 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 a m. (Foldable f, Monoid m) => ((a) -> m, f a) -> m
§Type Parameters
FnBrand: The brand of the clonable function to use.Func: The type of the mapping function.A: The type of the elements in the structure.M: The type of the monoid.
§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::classes::foldable::Foldable;
use fp_library::brands::OptionBrand;
use fp_library::types::string; // Import Monoid impl for String
use fp_library::brands::RcFnBrand;
let x = Some(5);
let y = OptionBrand::fold_map::<RcFnBrand, _, _, _>(|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.