additional overloads

This commit is contained in:
AF 2023-05-20 14:19:38 +00:00
parent 979d1a587a
commit 3ab74bfbbd

View File

@ -195,7 +195,7 @@ impl<T: Monad, O: DeriveMonad> Monad for OverloadClass<T, O> {
}
}
struct DeriveFail<Ex>(Ex);
pub struct DeriveFail<Ex>(Ex);
impl<Ex> DeriveMonad for DeriveFail<Ex> {}
@ -279,3 +279,32 @@ impl<Ex, Fallible: MonadFailAny> MonadFailAny for DeriveFailAny<Ex, Fallible> {
})
}
}
impl<T: SharedFunctor, O: DeriveWeakFunctor> SharedFunctor for OverloadClass<T, O> {
type Shared<'a, A: 'a + Clone> = T::Shared<'a, A>
where
Self: 'a;
fn share<'a, A: 'a + Clone>(fa: Self::F<'a, A>) -> Self::Shared<'a, A>
where
Self: 'a,
{
T::share(fa)
}
fn unshare<'a, A: 'a + Clone>(sa: Self::Shared<'a, A>) -> Self::F<'a, A>
where
Self: 'a,
{
T::unshare(sa)
}
}
impl<T: CovariantFunctor, O: DeriveWeakFunctor> CovariantFunctor for OverloadClass<T, O> {
fn variate<'a: 'b, 'b, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'b, A>
where
Self: 'a,
{
T::variate(fa)
}
}