derivations::bind
This commit is contained in:
parent
5d1349cd80
commit
629a0c9c83
@ -166,6 +166,8 @@ pub trait Applicative: Pure + ApplicativeSeq + ApplicativeLA2 + ApplicativeTuple
|
||||
/// <https://hackage.haskell.org/package/base-4.18.0.0/docs/Control-Monad.html>
|
||||
pub trait Monad: Applicative {
|
||||
/// Equivalent of Haskell's `>==`.
|
||||
/// Due to Rust limitations, it's not a `function->function` conversion.
|
||||
/// For that see [`derivations::bind`].
|
||||
fn bind<'a, A: 'a, B: 'a>(
|
||||
fa: Self::F<'a, A>,
|
||||
f: impl 'a + FnOnce(A) -> Self::F<'a, B>,
|
||||
|
@ -9,6 +9,13 @@ pub fn fmap<'a, T: 'a + Functor, A: 'a, B: 'a>(
|
||||
move |fa| T::fmap(f, fa)
|
||||
}
|
||||
|
||||
/// Equivalent of Haskell's `fmap`. `function-function` equivalent of [Monad::bind].
|
||||
pub fn bind<'a, T: 'a + Monad, A: 'a, B: 'a>(
|
||||
f: impl 'a + FnOnce(A) -> T::F<'a, B>,
|
||||
) -> impl FnOnce(T::F<'a, A>) -> T::F<'a, B> {
|
||||
move |fa| T::bind(fa, f)
|
||||
}
|
||||
|
||||
pub trait ApplicativeLA2ViaSeq: ApplicativeSeq {
|
||||
fn _la2_via_seq<'a, A: 'a, B: 'a, C: 'a>(
|
||||
f: impl 'a + FnOnce(A, B) -> C,
|
||||
|
Loading…
Reference in New Issue
Block a user