Trait frunk_core::hlist::HFoldLeftable

source ·
pub trait HFoldLeftable<Folder, Acc> {
    type Output;

    // Required method
    fn foldl(self, folder: Folder, acc: Acc) -> Self::Output;
}
Expand description

Trait for performing a left fold over an HList

This trait is part of the implementation of the inherent method HCons::foldl. Please see that method for more information.

You only need to import this trait when working with generic HLists or Mappers of unknown type. If the type of everything is known, then list.foldl(f, acc) should “just work” even without the trait.

Required Associated Types§

Required Methods§

source

fn foldl(self, folder: Folder, acc: Acc) -> Self::Output

Perform a left fold over an HList.

Please see the inherent method for more information.

The only difference between that inherent method and this trait method is the location of the type parameters. (here, they are on the trait rather than the method)

Implementors§

source§

impl<F, Acc> HFoldLeftable<F, Acc> for HNil

source§

type Output = Acc

source§

impl<F, H, Tail, Acc> HFoldLeftable<F, Acc> for HCons<H, Tail>
where Tail: HFoldLeftable<F, Acc>, F: Fn(Acc, H) -> Acc,

Implementation for folding over an HList using a single function that can handle all cases

use frunk_core::hlist;

let h = hlist![1, 2, 3, 4, 5];

let r: isize = h.foldl(|acc, next| acc + next, 0);
assert_eq!(r, 15);
source§

type Output = <Tail as HFoldLeftable<F, Acc>>::Output

source§

impl<F, R, FTail, H, Tail, Acc> HFoldLeftable<HCons<F, FTail>, Acc> for HCons<H, Tail>
where Tail: HFoldLeftable<FTail, R>, F: FnOnce(Acc, H) -> R,

source§

type Output = <Tail as HFoldLeftable<FTail, R>>::Output

source§

impl<P, R, H, Tail, Acc> HFoldLeftable<Poly<P>, Acc> for HCons<H, Tail>
where Tail: HFoldLeftable<Poly<P>, R>, P: Func<(Acc, H), Output = R>,

source§

type Output = <Tail as HFoldLeftable<Poly<P>, R>>::Output