MonadExt
lift lifetime
This commit is contained in:
parent
68f9c82402
commit
1750be2df9
11
src/func.rs
11
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`].
|
/// [`FnMut`] version of [`Monad::iterate`].
|
||||||
/// Reasoning for this method existing at all is that
|
/// Reasoning for this method existing at all is that
|
||||||
/// most usecases are better modelled with [`FnMut`]
|
/// most usecases are better modelled with [`FnMut`]
|
||||||
/// rather than some dedicated state type.
|
/// rather than some dedicated state type.
|
||||||
fn iterate_mut<'a, A: 'a, B: 'a>(
|
fn iterate_mut<A: 'a, B: 'a>(
|
||||||
a: A,
|
a: A,
|
||||||
f: impl 'a + FnMut(A) -> Self::F<'a, ControlFlow<B, A>>,
|
f: impl 'a + FnMut(A) -> Self::F<'a, ControlFlow<B, A>>,
|
||||||
) -> Self::F<'a, B>
|
) -> Self::F<'a, B> {
|
||||||
where
|
|
||||||
Self: 'a,
|
|
||||||
{
|
|
||||||
Self::iterate(BindableMut::new(a, f))
|
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`.
|
/// Part of [`MonadFail`] responsible for Haskell's `fail`.
|
||||||
pub trait Fail<E>: WeakFunctor {
|
pub trait Fail<E>: WeakFunctor {
|
||||||
|
Loading…
Reference in New Issue
Block a user