select_map reorder

This commit is contained in:
AF 2023-05-29 23:52:57 +00:00
parent f5cbf65df9
commit d6231a26a6
3 changed files with 14 additions and 22 deletions

View File

@ -56,17 +56,13 @@ trait SpeculativeFailImpl<'a>: MonadFailAny<'a> {
Self::stuff(<<Self as MonadFailAny>::T as Monad>::join(
<<Self as MonadFailAny>::T as Functor>::fmap(
Self::unstuff,
Self::T::select_map(
|selected| match selected {
Self::T::select_map(Self::unstuff(wa), frwb, |selected| match selected {
Selected::A(ra, frwb) => Self::_speculative_ra_frwb(ra, frwb),
Selected::B(fra, Ok(wb)) => {
Self::map_err(Self::_speculative_fra_wb(fra, wb), Ok)
}
Selected::B(_, Err(e1)) => Self::fail(Err(e1)),
},
Self::unstuff(wa),
frwb,
),
}),
),
))
}
@ -88,14 +84,14 @@ trait SpeculativeFailImpl<'a>: MonadFailAny<'a> {
Self::stuff(<Self::T as Monad>::join(<Self::T as Functor>::fmap(
Self::unstuff,
Self::T::select_map(
Self::unstuff(wwa),
Self::unstuff(wwb),
|selected| match selected {
Selected::A(Ok(wa), frwb) => Self::_speculative_wa_frwb(wa, frwb),
Selected::A(Err(e1), _) => Self::fail(Err(e1)),
Selected::B(frwa, Ok(wb)) => Self::_speculative_frwa_wb(frwa, wb),
Selected::B(_, Err(e1)) => Self::fail(Err(e1)),
},
Self::unstuff(wwa),
Self::unstuff(wwb),
),
)))
}

View File

@ -18,9 +18,9 @@ pub trait ApplicativeSelect<'a>: Functor<'a> {
pub trait ApplicativeSelectExt<'a>: ApplicativeSelect<'a> {
/// Shorthand for [`Functor::fmap`]&#8728;[`ApplicativeSelect::select`].
fn select_map<A: 'a, B: 'a, C: 'a>(
f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C,
fa: Self::F<A>,
fb: Self::F<B>,
f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C,
) -> Self::F<C> {
Self::fmap(f, Self::select(fa, fb))
}

View File

@ -76,14 +76,10 @@ impl<'a, T: ApplicativeSelect<'a>, O: 'a + DeriveApplicative> ApplicativeSelect<
for OverloadInstance<T, O>
{
fn select<A: 'a, B: 'a>(fa: Self::F<A>, fb: Self::F<B>) -> SelectedWrapped<'a, A, B, Self> {
T::select_map(
|selected| match selected {
T::select_map(fa, fb, |selected| match selected {
Selected::A(a, fb) => Selected::A(a, fb),
Selected::B(fa, b) => Selected::B(fa, b),
},
fa,
fb,
)
})
}
}