Compare commits

..

No commits in common. "5d9a0a10dff5c967bae02c7acecba0556ec77480" and "6aa149ee6afd9c721a1a76cc708557ee299fb6fa" have entirely different histories.

2 changed files with 14 additions and 6 deletions

View File

@ -70,12 +70,6 @@ pub trait Functor: WeakFunctor {
}
}
pub fn fmap<'a, T: 'a + Functor, A: 'a, B: 'a>(
f: impl 'a + FnOnce(A) -> B,
) -> impl FnOnce(T::F<'a, A>) -> T::F<'a, B> {
move |fa| T::fmap(f, fa)
}
pub trait ApplicativeSeq: Functor {
fn seq<'a, A: 'a, B: 'a>(
ff: Self::F<'a, impl 'a + FnOnce(A) -> B>,

View File

@ -53,3 +53,17 @@ impl<U: ApplicativeLA2, V: ApplicativeLA2> ApplicativeLA2 for CompositionClass<U
U::la2(|ua, ub| V::la2(f, ua, ub), fa, fb)
}
}
pub fn compose<'a>(f: impl 'a + Fn(i16) -> i32, g: impl 'a + Fn(i8) -> i16) -> impl 'a + Fn(i8) -> i32 {
move |x| f(g(x))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_compose() {
assert_eq!(compose(|x| (x + 5).into(), |x| (x + 3).into())(2), 10);
}
}