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) } }