CopyMonad

This commit is contained in:
AF 2023-03-12 08:14:29 +00:00
parent ce63e3a1dd
commit d3ec497ec4

View File

@ -89,59 +89,59 @@ impl<T: ApplicativeLA2> CopyApplicativeLA2 for T {
} }
} }
// pub trait CopyApplicative: CopyFunctor + CopyApplicativeSeq + CopyApplicativeLA2 { pub trait CopyApplicative: CopyFunctor + CopyApplicativeSeq + CopyApplicativeLA2 {
// fn copy_pure<A: Copy>(a: A) -> Self::CF<A>; 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> { 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) 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> { 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) Self::copy_la2(|a, _| a, fa, fb)
// } }
// } }
// impl<T: Applicative> CopyApplicative for T { impl<T: Applicative> CopyApplicative for T {
// fn copy_pure<A: Copy>(a: A) -> Self::CF<A> { fn copy_pure<'a, A: 'a + Copy>(a: A) -> Self::CF<'a, A> {
// Self::pure(a) Self::pure(a)
// } }
// fn copy_discard_first<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<B> { 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) Self::discard_first(fa, fb)
// } }
// fn copy_discard_second<A: Copy, B: Copy>(fa: Self::CF<A>, fb: Self::CF<B>) -> Self::CF<A> { 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) Self::discard_second(fa, fb)
// } }
// } }
// pub trait CopyMonad: CopyApplicative { pub trait CopyMonad: CopyApplicative {
// fn copy_bind<A: Copy, B: Copy, F: Copy + Fn(A) -> Self::CF<B>>( fn copy_bind<'a, A: 'a + Copy, B: 'a + Copy, F: 'a + Copy + Fn(A) -> Self::CF<'a, B>>(
// fa: Self::CF<A>, fa: Self::CF<'a, A>,
// f: F, f: F,
// ) -> Self::CF<B>; ) -> Self::CF<'a, B>;
// fn copy_join<A: Copy>(ffa: Self::CF<Self::CF<A>>) -> Self::CF<A> fn copy_join<'a, A: 'a + Copy>(ffa: Self::CF<'a, Self::CF<'a, A>>) -> Self::CF<'a, A>
// where where
// Self::CF<A>: Copy, Self::CF<'a, A>: 'a + Copy,
// { {
// // ugly // ugly
// Self::copy_bind(ffa, |fa| fa) Self::copy_bind(ffa, |fa| fa)
// } }
// } }
// impl<T: Monad> CopyMonad for T { impl<T: Monad> CopyMonad for T {
// fn copy_bind<A: Copy, B: Copy, F: Copy + Fn(A) -> Self::CF<B>>( fn copy_bind<'a, A: 'a + Copy, B: 'a + Copy, F: 'a + Copy + Fn(A) -> Self::CF<'a, B>>(
// fa: Self::CF<A>, fa: Self::CF<'a, A>,
// f: F, f: F,
// ) -> Self::CF<B> { ) -> Self::CF<'a, B> {
// T::bind(fa, f) T::bind(fa, f)
// } }
// fn copy_join<A: Copy>(ffa: Self::CF<Self::CF<A>>) -> Self::CF<A> fn copy_join<'a, A: 'a + Copy>(ffa: Self::CF<'a, Self::CF<'a, A>>) -> Self::CF<'a, A>
// where where
// Self::CF<A>: Copy, Self::CF<'a, A>: 'a + Copy,
// { {
// T::join(ffa) T::join(ffa)
// } }
// } }