From 2e9d1ac22146c685e5b8cb85a0262dad1084c1cc Mon Sep 17 00:00:00 2001 From: timofey Date: Wed, 26 Apr 2023 16:29:00 +0000 Subject: [PATCH] more specific replace/void for option/result --- src/func/classes/option.rs | 15 +++++++++++++-- src/func/classes/result.rs | 10 +++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/func/classes/option.rs b/src/func/classes/option.rs index 19804a0..b37775c 100644 --- a/src/func/classes/option.rs +++ b/src/func/classes/option.rs @@ -21,8 +21,19 @@ impl Functor for OptionClass { fa.map(f) } - fn replace<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, b: B) -> Self::F<'a, B> { - fa.map(|_| b) + fn replace<'a, A: 'a, B: 'a>(fa: Self::F<'a, A>, b: B) -> Self::F<'a, B> + where + Self: 'a, + { + fa?; + Self::pure(b) + } + + fn void<'a, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'a, ()> + where + Self: 'a, { + fa?; + Self::pure(()) } } diff --git a/src/func/classes/result.rs b/src/func/classes/result.rs index ef3caa1..5509e10 100644 --- a/src/func/classes/result.rs +++ b/src/func/classes/result.rs @@ -28,7 +28,15 @@ impl Functor for ResultClass { where Self: 'a, { - fa.map(|_| b) + fa?; + Self::pure(b) + } + + fn void<'a, A: 'a>(fa: Self::F<'a, A>) -> Self::F<'a, ()> + where + Self: 'a, { + fa?; + Self::pure(()) } }