diff --git a/src/func.rs b/src/func.rs index ff00fdd..b96d88b 100644 --- a/src/func.rs +++ b/src/func.rs @@ -342,33 +342,24 @@ pub trait MonadFailAny { pub type WrapE<'a, A, E, Fallible> = Wrap<'a, A, ::W>; -pub trait MonadFailAnyExt: MonadFailAny { - fn pure<'a, E: 'a, A: 'a>(a: A) -> WrapE<'a, A, E, Self> - where - Self: 'a, - { +pub trait MonadFailAnyExt<'a>: 'a + MonadFailAny { + fn pure(a: A) -> WrapE<'a, A, E, Self> { as Pure>::pure(a) } - fn fail<'a, E: 'a, A: 'a>(e: E) -> WrapE<'a, A, E, Self> - where - Self: 'a, - { + fn fail(e: E) -> WrapE<'a, A, E, Self> { as Fail>::fail(e) } - fn speculative<'a, A: 'a, B: 'a, E0: 'a, E1: 'a>( + fn speculative( wwa: WrapE<'a, WrapE<'a, A, E0, Self>, E1, Self>, wwb: WrapE<'a, WrapE<'a, B, E0, Self>, E1, Self>, - ) -> WrapE<'a, (A, B), Result, Self> - where - Self: 'a, - { + ) -> WrapE<'a, (A, B), Result, Self> { >::speculative(wwa, wwb) } } -impl MonadFailAnyExt for Fallible {} +impl<'a, Fallible: ?Sized + 'a + MonadFailAny> MonadFailAnyExt<'a> for Fallible {} pub trait SharedFunctor: WeakFunctor { type Shared<'a, A: 'a + Clone>: 'a + Clone