use super::{controlflow::BindableMut, *}; pub trait MonadExt<'a>: Monad<'a> { /// [`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, f: impl 'a + FnMut(A) -> Self::F>, ) -> Self::F { Self::iterate(BindableMut::new(a, f)) } fn bind2( fa: Self::F, fb: Self::F, f: impl 'a + FnOnce(A, B) -> Self::F, ) -> Self::F { Self::join(Self::la2(fa, fb, f)) } }