fp_core/
apply.rs

1use crate::functor::Functor;
2use crate::hkt::HKT;
3
4type Applicator<B, S: HKT<B>> = <S as HKT<Box<Fn(<S as HKT<B>>::Current) -> B>>>::Target;
5
6pub trait Apply<B>: Functor<B> + HKT<Box<Fn(<Self as HKT<B>>::Current) -> B>> {
7    fn ap(self, f: Applicator<B, Self>) -> <Self as HKT<B>>::Target;
8}
9
10impl<A, B> Apply<B> for Option<A> {
11    fn ap(self, f: Applicator<B, Self>) -> <Self as HKT<B>>::Target {
12        self.and_then(|v| f.map(|z| z(v)))
13    }
14}
15
16impl<A, B, E> Apply<B> for Result<A, E> {
17    fn ap(self, f: Applicator<B, Self>) -> <Self as HKT<B>>::Target {
18        self.and_then(|v| f.map(|z| z(v)))
19    }
20}