CopyMonad
This commit is contained in:
parent
ce63e3a1dd
commit
d3ec497ec4
@ -89,59 +89,59 @@ impl<T: ApplicativeLA2> CopyApplicativeLA2 for T {
|
||||
}
|
||||
}
|
||||
|
||||
// pub trait CopyApplicative: CopyFunctor + CopyApplicativeSeq + CopyApplicativeLA2 {
|
||||
// fn copy_pure<A: Copy>(a: A) -> Self::CF<A>;
|
||||
pub trait CopyApplicative: CopyFunctor + CopyApplicativeSeq + CopyApplicativeLA2 {
|
||||
fn copy_pure<'a, A: 'a + Copy>(a: A) -> Self::CF<'a, A>;
|
||||
|
||||
// fn copy_discard_first<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<B> {
|
||||
// Self::copy_seq(Self::copy_replace(fa, |b| b), fb)
|
||||
// }
|
||||
fn copy_discard_first<'a, A: 'a + Copy, B: 'a + Copy>(fa: Self::CF<'a, A>, fb: Self::CF<'a, B>) -> Self::CF<'a, B> {
|
||||
Self::copy_seq(Self::copy_replace(fa, |b| b), fb)
|
||||
}
|
||||
|
||||
// fn copy_discard_second<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<A> {
|
||||
// Self::copy_la2(|a, _| a, fa, fb)
|
||||
// }
|
||||
// }
|
||||
fn copy_discard_second<'a, A: 'a + Copy, B: 'a + Copy>(fa: Self::CF<'a, A>, fb: Self::CF<'a, B>) -> Self::CF<'a, A> {
|
||||
Self::copy_la2(|a, _| a, fa, fb)
|
||||
}
|
||||
}
|
||||
|
||||
// impl<T: Applicative> CopyApplicative for T {
|
||||
// fn copy_pure<A: Copy>(a: A) -> Self::CF<A> {
|
||||
// Self::pure(a)
|
||||
// }
|
||||
impl<T: Applicative> CopyApplicative for T {
|
||||
fn copy_pure<'a, A: 'a + Copy>(a: A) -> Self::CF<'a, A> {
|
||||
Self::pure(a)
|
||||
}
|
||||
|
||||
// fn copy_discard_first<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<B> {
|
||||
// Self::discard_first(fa, fb)
|
||||
// }
|
||||
fn copy_discard_first<'a, A: 'a + Copy, B: 'a + Copy>(fa: Self::CF<'a, A>, fb: Self::CF<'a, B>) -> Self::CF<'a, B> {
|
||||
Self::discard_first(fa, fb)
|
||||
}
|
||||
|
||||
// fn copy_discard_second<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<A> {
|
||||
// Self::discard_second(fa, fb)
|
||||
// }
|
||||
// }
|
||||
fn copy_discard_second<'a, A: 'a + Copy, B: 'a + Copy>(fa: Self::CF<'a, A>, fb: Self::CF<'a, B>) -> Self::CF<'a, A> {
|
||||
Self::discard_second(fa, fb)
|
||||
}
|
||||
}
|
||||
|
||||
// pub trait CopyMonad: CopyApplicative {
|
||||
// fn copy_bind<A: Copy, B: Copy, F: Copy + Fn(A) -> Self::CF<B>>(
|
||||
// fa: Self::CF<A>,
|
||||
// f: F,
|
||||
// ) -> Self::CF<B>;
|
||||
pub trait CopyMonad: CopyApplicative {
|
||||
fn copy_bind<'a, A: 'a + Copy, B: 'a + Copy, F: 'a + Copy + Fn(A) -> Self::CF<'a, B>>(
|
||||
fa: Self::CF<'a, A>,
|
||||
f: F,
|
||||
) -> Self::CF<'a, B>;
|
||||
|
||||
// fn copy_join<A: Copy>(ffa: Self::CF<Self::CF<A>>) -> Self::CF<A>
|
||||
// where
|
||||
// Self::CF<A>: Copy,
|
||||
// {
|
||||
// // ugly
|
||||
// Self::copy_bind(ffa, |fa| fa)
|
||||
// }
|
||||
// }
|
||||
fn copy_join<'a, A: 'a + Copy>(ffa: Self::CF<'a, Self::CF<'a, A>>) -> Self::CF<'a, A>
|
||||
where
|
||||
Self::CF<'a, A>: 'a + Copy,
|
||||
{
|
||||
// ugly
|
||||
Self::copy_bind(ffa, |fa| fa)
|
||||
}
|
||||
}
|
||||
|
||||
// impl<T: Monad> CopyMonad for T {
|
||||
// fn copy_bind<A: Copy, B: Copy, F: Copy + Fn(A) -> Self::CF<B>>(
|
||||
// fa: Self::CF<A>,
|
||||
// f: F,
|
||||
// ) -> Self::CF<B> {
|
||||
// T::bind(fa, f)
|
||||
// }
|
||||
impl<T: Monad> CopyMonad for T {
|
||||
fn copy_bind<'a, A: 'a + Copy, B: 'a + Copy, F: 'a + Copy + Fn(A) -> Self::CF<'a, B>>(
|
||||
fa: Self::CF<'a, A>,
|
||||
f: F,
|
||||
) -> Self::CF<'a, B> {
|
||||
T::bind(fa, f)
|
||||
}
|
||||
|
||||
// fn copy_join<A: Copy>(ffa: Self::CF<Self::CF<A>>) -> Self::CF<A>
|
||||
// where
|
||||
// Self::CF<A>: Copy,
|
||||
// {
|
||||
// T::join(ffa)
|
||||
// }
|
||||
// }
|
||||
fn copy_join<'a, A: 'a + Copy>(ffa: Self::CF<'a, Self::CF<'a, A>>) -> Self::CF<'a, A>
|
||||
where
|
||||
Self::CF<'a, A>: 'a + Copy,
|
||||
{
|
||||
T::join(ffa)
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user