use super::{weakfunctorany::WeakFunctorAny, WeakFunctor}; pub use radn_derive::SharedFunctorAny; pub trait SharedFunctorAny: WeakFunctorAny { type SharedAny<'a, A: 'a + Send + Sync + Clone>: 'a + Send + Sync + Clone where Self: 'a; fn share<'a, A: 'a + Send + Sync + Clone>(fa: Self::FAny<'a, A>) -> Self::SharedAny<'a, A> where Self: 'a; fn unshare<'a, A: 'a + Send + Sync + Clone>(sa: Self::SharedAny<'a, A>) -> Self::FAny<'a, A> where Self: 'a; } pub trait SharedFunctor<'a>: WeakFunctor<'a> { type Shared: 'a + Send + Sync + Clone; fn share(fa: Self::F) -> Self::Shared; fn unshare(sa: Self::Shared) -> Self::F; } impl<'a, T: 'a + SharedFunctorAny> SharedFunctor<'a> for T { type Shared = T::SharedAny<'a, A>; fn share(fa: Self::F) -> Self::Shared { T::share(fa) } fn unshare(sa: Self::Shared) -> Self::F { T::unshare(sa) } }