From 324f99362f78b15f6cf89911a0d549c2192e0409 Mon Sep 17 00:00:00 2001 From: timofey Date: Sat, 20 May 2023 12:49:22 +0000 Subject: [PATCH] `MonadFailAnyExt` --- src/func.rs | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/func.rs b/src/func.rs index 6d5d013..8c001a6 100644 --- a/src/func.rs +++ b/src/func.rs @@ -300,12 +300,29 @@ pub trait MonadFailAny { Self: 'a, { > as Monad>::bind(Self::map_err(wa, Err), |fa| match fa { - Ok(a) => > as Pure>::pure(a), - Err(e) => > as Fail>>::fail(Ok(e)), + Ok(a) => Self::pure(a), + Err(e) => Self::fail(Ok(e)), }) } } +pub trait MonadFailAnyExt: MonadFailAny { + fn pure<'a, E: 'a, A: 'a>(a: A) -> as WeakFunctor>::F<'a, A> + where + Self: 'a, + { + as Pure>::pure(a) + } + fn fail<'a, E: 'a, A: 'a>(e: E) -> as WeakFunctor>::F<'a, A> + where + Self: 'a, + { + as Fail>::fail(e) + } +} + +impl MonadFailAnyExt for Fallible {} + /// Represents a (collection of) [Monad]\(s), /// wrapped values of which are interchangeable with another [Monad]'s /// wrapped [Result]s.