diff --git a/src/func/controlflow.rs b/src/func/controlflow.rs index 11537d8..bf42152 100644 --- a/src/func/controlflow.rs +++ b/src/func/controlflow.rs @@ -46,11 +46,8 @@ impl<'a, T: ?Sized + Functor<'a>, A: 'a, B: 'a, F: 'a + FnMut(A) -> T::F IterativeWrapped<'a, Self> { let fstate = self.1(self.0); - T::fmap(fstate, move |state| match state { - ControlFlow::Continue(next_a) => { - ControlFlow::Continue(BindableMut::new(next_a, self.1)) - } - ControlFlow::Break(b) => ControlFlow::Break(b), + T::fmap(fstate, move |state| { + ControlFlow::Continue(BindableMut::new(state?, self.1)) }) } } diff --git a/src/func/instances/composition.rs b/src/func/instances/composition.rs index 25a9666..242a076 100644 --- a/src/func/instances/composition.rs +++ b/src/func/instances/composition.rs @@ -120,9 +120,8 @@ impl< fn next(self) -> IterativeWrapped<'a, Self> { let fstate = self.0.next(); - U::fmap(fstate, |ustate| match V::unstuff(ustate) { - ControlFlow::Continue(next_f) => ControlFlow::Continue(Self(next_f)), - ControlFlow::Break(b) => ControlFlow::Break(b), + U::fmap(fstate, |ustate| { + ControlFlow::Continue(Self(V::unstuff(ustate)?)) }) } } diff --git a/src/func/instances/overload.rs b/src/func/instances/overload.rs index 9ee1517..22a566c 100644 --- a/src/func/instances/overload.rs +++ b/src/func/instances/overload.rs @@ -109,9 +109,8 @@ impl<'a, T: Monad<'a>, O: 'a + DeriveMonad, F: Iterative<'a, T = OverloadInstanc type T = T; fn next(self) -> IterativeWrapped<'a, Self> { - T::fmap(self.0.next(), |state| match state { - ControlFlow::Continue(next_f) => ControlFlow::Continue(Self::new(next_f)), - ControlFlow::Break(b) => ControlFlow::Break(b), + T::fmap(self.0.next(), |state| { + ControlFlow::Continue(Self::new(state?)) }) } }