1
 2
 3
 4
 5
 6
 7
 8
 9
10
use crate::applicative::Applicative;
use crate::chain::Chain;

pub trait Monad<A, F, B>: Chain<A, B> + Applicative<A, F, B>
where
    F: FnOnce(A) -> B,
{
}

impl<A, F, B> Monad<A, F, B> for Option<A> where F: FnOnce(A) -> B {}