pub trait FunctorContextExt<'a>: FunctorContext<'a> {
// Provided methods
fn fmap<A: 'a + Send, B: 'a + Send>(
fa: WrapC<'a, A, Self>,
f: impl 'a + Send + FnOnce(A) -> B
) -> WrapC<'a, B, Self>
where Self::T: Functor<'a> { ... }
fn pure<A: 'a + Send>(a: A) -> WrapC<'a, A, Self>
where Self::T: Pure<'a> { ... }
fn bind<A: 'a + Send, B: 'a + Send>(
fa: WrapC<'a, A, Self>,
f: impl 'a + Send + FnOnce(A) -> WrapC<'a, B, Self>
) -> WrapC<'a, B, Self>
where Self::T: Monad<'a> { ... }
fn fail<A: 'a + Send, E: 'a + Send>(e: E) -> WrapC<'a, A, Self>
where Self::T: Fail<'a, E> { ... }
}