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::stuff(<<Self as MonadFailAny>::T as Monad>::join(
|
||||||
<<Self as MonadFailAny>::T as Functor>::fmap(
|
<<Self as MonadFailAny>::T as Functor>::fmap(
|
||||||
Self::unstuff,
|
Self::unstuff,
|
||||||
Self::T::select_map(
|
Self::T::select_map(Self::unstuff(wa), frwb, |selected| match selected {
|
||||||
|selected| match selected {
|
|
||||||
Selected::A(ra, frwb) => Self::_speculative_ra_frwb(ra, frwb),
|
Selected::A(ra, frwb) => Self::_speculative_ra_frwb(ra, frwb),
|
||||||
Selected::B(fra, Ok(wb)) => {
|
Selected::B(fra, Ok(wb)) => {
|
||||||
Self::map_err(Self::_speculative_fra_wb(fra, wb), Ok)
|
Self::map_err(Self::_speculative_fra_wb(fra, wb), Ok)
|
||||||
}
|
}
|
||||||
Selected::B(_, Err(e1)) => Self::fail(Err(e1)),
|
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::stuff(<Self::T as Monad>::join(<Self::T as Functor>::fmap(
|
||||||
Self::unstuff,
|
Self::unstuff,
|
||||||
Self::T::select_map(
|
Self::T::select_map(
|
||||||
|
Self::unstuff(wwa),
|
||||||
|
Self::unstuff(wwb),
|
||||||
|selected| match selected {
|
|selected| match selected {
|
||||||
Selected::A(Ok(wa), frwb) => Self::_speculative_wa_frwb(wa, frwb),
|
Selected::A(Ok(wa), frwb) => Self::_speculative_wa_frwb(wa, frwb),
|
||||||
Selected::A(Err(e1), _) => Self::fail(Err(e1)),
|
Selected::A(Err(e1), _) => Self::fail(Err(e1)),
|
||||||
Selected::B(frwa, Ok(wb)) => Self::_speculative_frwa_wb(frwa, wb),
|
Selected::B(frwa, Ok(wb)) => Self::_speculative_frwa_wb(frwa, wb),
|
||||||
Selected::B(_, Err(e1)) => Self::fail(Err(e1)),
|
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> {
|
pub trait ApplicativeSelectExt<'a>: ApplicativeSelect<'a> {
|
||||||
/// Shorthand for [`Functor::fmap`]∘[`ApplicativeSelect::select`].
|
/// Shorthand for [`Functor::fmap`]∘[`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,
|
|
||||||
fa: Self::F<A>,
|
fa: Self::F<A>,
|
||||||
fb: Self::F<B>,
|
fb: Self::F<B>,
|
||||||
|
f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C,
|
||||||
) -> Self::F<C> {
|
) -> Self::F<C> {
|
||||||
Self::fmap(f, Self::select(fa, fb))
|
Self::fmap(f, Self::select(fa, fb))
|
||||||
}
|
}
|
||||||
|
@ -76,14 +76,10 @@ impl<'a, T: ApplicativeSelect<'a>, O: 'a + DeriveApplicative> ApplicativeSelect<
|
|||||||
for OverloadInstance<T, O>
|
for OverloadInstance<T, O>
|
||||||
{
|
{
|
||||||
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> {
|
||||||
T::select_map(
|
T::select_map(fa, fb, |selected| match selected {
|
||||||
|selected| match selected {
|
|
||||||
Selected::A(a, fb) => Selected::A(a, fb),
|
Selected::A(a, fb) => Selected::A(a, fb),
|
||||||
Selected::B(fa, b) => Selected::B(fa, b),
|
Selected::B(fa, b) => Selected::B(fa, b),
|
||||||
},
|
})
|
||||||
fa,
|
|
||||||
fb,
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user