select_map
reorder
This commit is contained in:
parent
f5cbf65df9
commit
d6231a26a6
@ -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 {
|
||||
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,
|
||||
),
|
||||
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)),
|
||||
}),
|
||||
),
|
||||
))
|
||||
}
|
||||
@ -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),
|
||||
),
|
||||
)))
|
||||
}
|
||||
|
@ -18,9 +18,9 @@ pub trait ApplicativeSelect<'a>: Functor<'a> {
|
||||
pub trait ApplicativeSelectExt<'a>: ApplicativeSelect<'a> {
|
||||
/// Shorthand for [`Functor::fmap`]∘[`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))
|
||||
}
|
||||
|
@ -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 {
|
||||
Selected::A(a, fb) => Selected::A(a, fb),
|
||||
Selected::B(fa, b) => Selected::B(fa, b),
|
||||
},
|
||||
fa,
|
||||
fb,
|
||||
)
|
||||
T::select_map(fa, fb, |selected| match selected {
|
||||
Selected::A(a, fb) => Selected::A(a, fb),
|
||||
Selected::B(fa, b) => Selected::B(fa, b),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user