WrapC
This commit is contained in:
parent
6ec6ba7076
commit
e23252b8cf
@ -1,21 +1,20 @@
|
|||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
pub type WrapC<'a, A, Ctx> = Wrap<'a, A, <Ctx as FunctorContext<'a>>::T>;
|
||||||
|
|
||||||
pub trait FunctorContext<'a>: 'a {
|
pub trait FunctorContext<'a>: 'a {
|
||||||
type T: WeakFunctor<'a>;
|
type T: WeakFunctor<'a>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait FunctorContextExt<'a>: FunctorContext<'a> {
|
pub trait FunctorContextExt<'a>: FunctorContext<'a> {
|
||||||
fn fmap<A: 'a, B: 'a>(
|
fn fmap<A: 'a, B: 'a>(fa: WrapC<'a, A, Self>, f: impl 'a + FnOnce(A) -> B) -> WrapC<'a, B, Self>
|
||||||
fa: Wrap<'a, A, Self::T>,
|
|
||||||
f: impl 'a + FnOnce(A) -> B,
|
|
||||||
) -> Wrap<'a, B, Self::T>
|
|
||||||
where
|
where
|
||||||
Self::T: Functor<'a>,
|
Self::T: Functor<'a>,
|
||||||
{
|
{
|
||||||
<Self::T as Functor>::fmap(fa, f)
|
<Self::T as Functor>::fmap(fa, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn pure<A: 'a>(a: A) -> Wrap<'a, A, Self::T>
|
fn pure<A: 'a>(a: A) -> WrapC<'a, A, Self>
|
||||||
where
|
where
|
||||||
Self::T: Pure<'a>,
|
Self::T: Pure<'a>,
|
||||||
{
|
{
|
||||||
@ -23,16 +22,16 @@ pub trait FunctorContextExt<'a>: FunctorContext<'a> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn bind<A: 'a, B: 'a>(
|
fn bind<A: 'a, B: 'a>(
|
||||||
fa: Wrap<'a, A, Self::T>,
|
fa: WrapC<'a, A, Self>,
|
||||||
f: impl 'a + FnOnce(A) -> Wrap<'a, B, Self::T>,
|
f: impl 'a + FnOnce(A) -> WrapC<'a, B, Self>,
|
||||||
) -> Wrap<'a, B, Self::T>
|
) -> WrapC<'a, B, Self>
|
||||||
where
|
where
|
||||||
Self::T: Monad<'a>,
|
Self::T: Monad<'a>,
|
||||||
{
|
{
|
||||||
<Self::T as Monad>::bind(fa, f)
|
<Self::T as Monad>::bind(fa, f)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn fail<A: 'a, E: 'a>(e: E) -> Wrap<'a, A, Self::T>
|
fn fail<A: 'a, E: 'a>(e: E) -> WrapC<'a, A, Self>
|
||||||
where
|
where
|
||||||
Self::T: Fail<'a, E>,
|
Self::T: Fail<'a, E>,
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user