From 2badeb7f01cb5dc79964fc93e14172e8cadac051 Mon Sep 17 00:00:00 2001 From: timofey Date: Sun, 15 Oct 2023 15:10:23 +0000 Subject: [PATCH] join_can_be_expressed_via_bind --- src/func/test_suite.rs | 5 +++++ src/func/tests.rs | 14 ++++++++++++++ 2 files changed, 19 insertions(+) diff --git a/src/func/test_suite.rs b/src/func/test_suite.rs index e1a53eb..5ec0f3a 100644 --- a/src/func/test_suite.rs +++ b/src/func/test_suite.rs @@ -83,5 +83,10 @@ 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| { + T::sample(|pb| { + res += join_can_be_expressed_via_bind::(|| pa(pb(2))); + }) + }); res } diff --git a/src/func/tests.rs b/src/func/tests.rs index 031d179..918625c 100644 --- a/src/func/tests.rs +++ b/src/func/tests.rs @@ -347,3 +347,17 @@ pub fn tuple_can_be_expressed_via_la2< T::la2(fa0(), fb0(), |a, b| (a, b)), ) } + +pub fn join_can_be_expressed_via_bind< + 'a, + T: Monad<'a> + Eqr<'a>, + A: 'a + Send + Debug + PartialEq, +>( + ffa0: impl Fn() -> T::F>, +) -> R { + T::eqr( + "join via bind: join x = x >>= id", + T::join(ffa0()), + T::bind(ffa0(), |fa| fa), + ) +}