From 3ab74bfbbd9d828c232650f0d9cc391fdbbfcc43 Mon Sep 17 00:00:00 2001 From: timofey Date: Sat, 20 May 2023 14:19:38 +0000 Subject: [PATCH] additional overloads --- src/func/classes/overload.rs | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/func/classes/overload.rs b/src/func/classes/overload.rs index 35c602b..8d3cc7b 100644 --- a/src/func/classes/overload.rs +++ b/src/func/classes/overload.rs @@ -195,7 +195,7 @@ impl Monad for OverloadClass { } } -struct DeriveFail(Ex); +pub struct DeriveFail(Ex); impl DeriveMonad for DeriveFail {} @@ -279,3 +279,32 @@ impl MonadFailAny for DeriveFailAny { }) } } + +impl SharedFunctor for OverloadClass { + 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 CovariantFunctor for OverloadClass { + fn variate<'a: 'b, 'b, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'b, A> + where + Self: 'a, + { + T::variate(fa) + } +}