1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
use crate::prelude::Applicative;
impl<'a> Applicative<'a, char> for String {
type PureT<T> = char where T: 'a;
fn pure(a: Self::PureT<()>) -> Self::Type<Self::PureT<()>> {
vec![a]
}
fn app<F, B>(self, fs: Self::Type<F>) -> Self::Type<B>
where
F: Fn(char) -> B + 'a,
B: 'a,
{
fs.into_iter()
.flat_map(|f| self.clone().chars().map(f).collect::<Vec<_>>())
.collect()
}
}