MonadFailAny::bind

This commit is contained in:
AF 2023-05-20 13:09:15 +00:00
parent 324f99362f
commit 2bf4814b92
3 changed files with 37 additions and 0 deletions

View File

@ -293,6 +293,13 @@ pub trait MonadFailAny {
where where
Self: 'a; Self: 'a;
fn bind<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, A>,
f: impl 'a + FnOnce(Result<A, E0>) -> <Self::W<E1> as WeakFunctor>::F<'a, A>,
) -> <Self::W<E1> as WeakFunctor>::F<'a, A>
where
Self: 'a;
fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>( fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>, wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>,
) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A> ) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A>

View File

@ -235,6 +235,16 @@ impl MonadFailAny for ResultFailAny {
wa.bind_err(f) wa.bind_err(f)
} }
fn bind<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, A>,
f: impl 'a + FnOnce(Result<A, E0>) -> <Self::W<E1> as WeakFunctor>::F<'a, A>,
) -> <Self::W<E1> as WeakFunctor>::F<'a, A>
where
Self: 'a,
{
f(wa)
}
fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>( fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>, wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>,
) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A> ) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A>
@ -299,6 +309,16 @@ impl<T: Monad> MonadFailAny for ResultFailOver<T> {
}) })
} }
fn bind<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, A>,
f: impl 'a + FnOnce(Result<A, E0>) -> <Self::W<E1> as WeakFunctor>::F<'a, A>,
) -> <Self::W<E1> as WeakFunctor>::F<'a, A>
where
Self: 'a,
{
T::bind(wa, f)
}
fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>( fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>, wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>,
) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A> ) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A>

View File

@ -222,6 +222,16 @@ impl MonadFailAny for FutureFailAny {
}) })
} }
fn bind<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, A>,
f: impl 'a + FnOnce(Result<A, E0>) -> <Self::W<E1> as WeakFunctor>::F<'a, A>,
) -> <Self::W<E1> as WeakFunctor>::F<'a, A>
where
Self: 'a,
{
Box::pin(async { f(wa.await).await })
}
fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>( fn rotate_out<'a, A: 'a, E0: 'a, E1: 'a>(
wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>, wa: <Self::W<E0> as WeakFunctor>::F<'a, Result<A, E1>>,
) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A> ) -> <Self::W<Result<E1, E0>> as WeakFunctor>::F<'a, A>