lubeck 0.0.0-prealpha.5-abandoned

Functional programming framework written in cutting edge rust
Documentation
use crate::traits::Monad;

use super::Reader;

impl<'a, R, A> Monad<'a, A> for Reader<'a, R, A>
where
    R: Clone + 'a,
    A: 'a,
{
    fn bind<F, B>(self, monad_f: F) -> Self::Type<B>
    where
        F: Fn(A) -> Self::Type<B> + 'a,
    {
        Reader::<R, B>::new(move |r| {
            // R -> A
            let a = self.run(r.clone());
            // A -> Reader<R, B>
            let rb = monad_f(a);
            // R -> B
            rb.run(r)
        })
    }
}