diff --git a/src/func/context.rs b/src/func/context.rs index f3e69c4..f3f58f0 100644 --- a/src/func/context.rs +++ b/src/func/context.rs @@ -1,21 +1,20 @@ use super::*; +pub type WrapC<'a, A, Ctx> = Wrap<'a, A, >::T>; + pub trait FunctorContext<'a>: 'a { type T: WeakFunctor<'a>; } pub trait FunctorContextExt<'a>: FunctorContext<'a> { - fn fmap( - fa: Wrap<'a, A, Self::T>, - f: impl 'a + FnOnce(A) -> B, - ) -> Wrap<'a, B, Self::T> + fn fmap(fa: WrapC<'a, A, Self>, f: impl 'a + FnOnce(A) -> B) -> WrapC<'a, B, Self> where Self::T: Functor<'a>, { ::fmap(fa, f) } - fn pure(a: A) -> Wrap<'a, A, Self::T> + fn pure(a: A) -> WrapC<'a, A, Self> where Self::T: Pure<'a>, { @@ -23,16 +22,16 @@ pub trait FunctorContextExt<'a>: FunctorContext<'a> { } fn bind( - fa: Wrap<'a, A, Self::T>, - f: impl 'a + FnOnce(A) -> Wrap<'a, B, Self::T>, - ) -> Wrap<'a, B, Self::T> + fa: WrapC<'a, A, Self>, + f: impl 'a + FnOnce(A) -> WrapC<'a, B, Self>, + ) -> WrapC<'a, B, Self> where Self::T: Monad<'a>, { ::bind(fa, f) } - fn fail(e: E) -> Wrap<'a, A, Self::T> + fn fail(e: E) -> WrapC<'a, A, Self> where Self::T: Fail<'a, E>, {