diff --git a/src/flow/speculative.rs b/src/flow/speculative.rs index 8e06936..025c15f 100644 --- a/src/flow/speculative.rs +++ b/src/flow/speculative.rs @@ -56,17 +56,13 @@ trait SpeculativeFailImpl<'a>: MonadFailAny<'a> { Self::stuff(<::T as Monad>::join( <::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(::join(::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), ), ))) } diff --git a/src/func/applicative_select.rs b/src/func/applicative_select.rs index 4eb0ee5..31367fb 100644 --- a/src/func/applicative_select.rs +++ b/src/func/applicative_select.rs @@ -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( - f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, fa: Self::F, fb: Self::F, + f: impl 'a + FnOnce(Selected<'a, A, B, Self>) -> C, ) -> Self::F { Self::fmap(f, Self::select(fa, fb)) } diff --git a/src/func/instances/overload.rs b/src/func/instances/overload.rs index 0690ee0..0a2be03 100644 --- a/src/func/instances/overload.rs +++ b/src/func/instances/overload.rs @@ -76,14 +76,10 @@ impl<'a, T: ApplicativeSelect<'a>, O: 'a + DeriveApplicative> ApplicativeSelect< for OverloadInstance { fn select(fa: Self::F, fb: Self::F) -> 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), + }) } }