join_can_be_expressed_via_bind
All checks were successful
buildbot/cargo fmt (1.72) Build done.
buildbot/cargo clippy (1.72) Build done.
buildbot/cargo doc (1.72) Build done.
buildbot/cargo test (1.65) Build done.
buildbot/cargo clippy (1.65) Build done.

This commit is contained in:
AF 2023-10-15 15:10:23 +00:00
parent 106fd83e33
commit 2badeb7f01
2 changed files with 19 additions and 0 deletions

View File

@ -83,5 +83,10 @@ pub fn monad_follows_laws<'a, T: Monad<'a> + FunctorTestSuite<'a>>() -> R {
T::sample(|pa| { T::sample(|pa| {
res += fmap_can_be_expressed_via_bind::<T, _, _>(|x| x + 3, || pa(2)); res += fmap_can_be_expressed_via_bind::<T, _, _>(|x| x + 3, || pa(2));
}); });
T::sample(|pa| {
T::sample(|pb| {
res += join_can_be_expressed_via_bind::<T, _>(|| pa(pb(2)));
})
});
res res
} }

View File

@ -347,3 +347,17 @@ pub fn tuple_can_be_expressed_via_la2<
T::la2(fa0(), fb0(), |a, b| (a, b)), 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<T::F<A>>,
) -> R {
T::eqr(
"join via bind: join x = x >>= id",
T::join(ffa0()),
T::bind(ffa0(), |fa| fa),
)
}