20 lines
443 B
Rust
20 lines
443 B
Rust
use super::*;
|
|
|
|
pub enum Selected<'a, A: 'a, B: 'a, T: ?Sized + 'a + WeakFunctor> {
|
|
A(A, T::F<'a, B>),
|
|
B(T::F<'a, A>, B),
|
|
}
|
|
|
|
pub trait ApplicativeSelect: Functor {
|
|
fn select<'a, A: 'a, B: 'a, C: 'a>(
|
|
f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C,
|
|
fa: Self::F<'a, A>,
|
|
fb: Self::F<'a, B>,
|
|
) -> Self::F<'a, C>
|
|
where
|
|
Self: 'a,
|
|
{
|
|
Self::fmap(|a| f(Selected::A(a, fb)), fa)
|
|
}
|
|
}
|