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| {
let a = self.run(r.clone());
let rb = monad_f(a);
rb.run(r)
})
}
}