1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use std::ops::{Add, Mul};

use crate::prelude::*;

impl<A> Foldable<A> for Vec<A> {
    fn foldr<F, B>(self, folder: F, init: B) -> B
    where
        F: Fn(B, A) -> B,
    {
        self.into_iter().fold(init, folder)
    }
}

impl<M: Monoid> FoldableExtMonoid<M> for Vec<M> {}
impl<A: PartialEq> FoldableExtEq<A> for Vec<A> {}
impl<A: PartialOrd> FoldableExtOrd<A> for Vec<A> {}
impl<A: Add<Output = A> + Monoid> FoldableExtSum<A> for Vec<A> {}
impl<A: Mul<Output = A> + Monoid> FoldableExtProd<A> for Vec<A> {}