MonadExt lift lifetime

This commit is contained in:
AF 2023-05-26 07:47:30 +00:00
parent 68f9c82402
commit 1750be2df9

View File

@ -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, B: 'a>(
a: A,
f: impl 'a + FnMut(A) -> Self::F<'a, ControlFlow<B, A>>,
) -> Self::F<'a, B>
where
Self: 'a,
{
) -> Self::F<'a, B> {
Self::iterate(BindableMut::new(a, f))
}
}
impl<T: Monad> MonadExt for T {}
impl<'a, T: 'a + Monad> MonadExt<'a> for T {}
/// Part of [`MonadFail`] responsible for Haskell's `fail`.
pub trait Fail<E>: WeakFunctor {