diff --git a/src/func/test_suite.rs b/src/func/test_suite.rs index 93eaeee..86d4f08 100644 --- a/src/func/test_suite.rs +++ b/src/func/test_suite.rs @@ -75,5 +75,8 @@ pub fn monad_follows_laws<'a, T: Monad<'a> + FunctorTestSuite<'a>>() -> R { T::sample(|pa| { res += fmap_can_be_expressed_via_bind::(|x| x + 3, || pa(2)); }); + T::sample(|pa| { + res += void_can_be_exressed_via_replace::(|| pa(2)); + }); res } diff --git a/src/func/tests.rs b/src/func/tests.rs index 185dfac..66d57ba 100644 --- a/src/func/tests.rs +++ b/src/func/tests.rs @@ -317,3 +317,17 @@ pub fn fmap_can_be_expressed_via_bind< T::bind(fa0(), move |a| T::pure(f(a))), ) } + +pub fn void_can_be_exressed_via_replace< + 'a, + T: Monad<'a> + Eqr<'a>, + A: 'a + Send + Debug + PartialEq, +>( + fa0: impl Fn() -> T::F, +) -> R { + T::eqr( + "void via bind: void x = () <$ x", + T::void(fa0()), + T::replace(fa0(), ()), + ) +}