ApplicativeSelect docs

This commit is contained in:
AF 2023-05-26 17:00:36 +00:00
parent 28fb9715a5
commit 133e6e72a3

View File

@ -5,8 +5,10 @@ pub enum Selected<'a, A: 'a, B: 'a, T: ?Sized + WeakFunctor<'a>> {
B(T::F<A>, B), B(T::F<A>, B),
} }
/// See [`ApplicativeSelect::select`].
pub type SelectedWrapped<'a, A, B, T> = Wrap<'a, Selected<'a, A, B, T>, T>; pub type SelectedWrapped<'a, A, B, T> = Wrap<'a, Selected<'a, A, B, T>, T>;
/// Part of [`Applicative`] responsible for choosing the first value.
pub trait ApplicativeSelect<'a>: Functor<'a> { pub trait ApplicativeSelect<'a>: Functor<'a> {
fn select<A: 'a, B: 'a>(fa: Self::F<A>, fb: Self::F<B>) -> SelectedWrapped<'a, A, B, Self> { fn select<A: 'a, B: 'a>(fa: Self::F<A>, fb: Self::F<B>) -> SelectedWrapped<'a, A, B, Self> {
Self::fmap(|a| Selected::A(a, fb), fa) Self::fmap(|a| Selected::A(a, fb), fa)
@ -14,6 +16,7 @@ pub trait ApplicativeSelect<'a>: Functor<'a> {
} }
pub trait ApplicativeSelectExt<'a>: ApplicativeSelect<'a> { pub trait ApplicativeSelectExt<'a>: ApplicativeSelect<'a> {
/// Shorthand for [`Functor::fmap`]&#8728;[`ApplicativeSelect::select`].
fn select_map<A: 'a, B: 'a, C: 'a>( fn select_map<A: 'a, B: 'a, C: 'a>(
f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C,
fa: Self::F<A>, fa: Self::F<A>,