diff --git a/src/func.rs b/src/func.rs index 23be49b..e71d2c3 100644 --- a/src/func.rs +++ b/src/func.rs @@ -204,23 +204,20 @@ pub trait Monad: Applicative { } } -pub trait MonadExt: Monad { +pub trait MonadExt<'a>: 'a + Monad { /// [`FnMut`] version of [`Monad::iterate`]. /// Reasoning for this method existing at all is that /// most usecases are better modelled with [`FnMut`] /// rather than some dedicated state type. - fn iterate_mut<'a, A: 'a, B: 'a>( + fn iterate_mut( a: A, f: impl 'a + FnMut(A) -> Self::F<'a, ControlFlow>, - ) -> Self::F<'a, B> - where - Self: 'a, - { + ) -> Self::F<'a, B> { Self::iterate(BindableMut::new(a, f)) } } -impl MonadExt for T {} +impl<'a, T: 'a + Monad> MonadExt<'a> for T {} /// Part of [`MonadFail`] responsible for Haskell's `fail`. pub trait Fail: WeakFunctor {