1 2 3 4 5 6 7 8 9 10 11 12
use applicative::Applicative; use bind::Bind; use std::rc::Rc; pub trait Monad<A, B>: Bind<B> + Applicative<A, B> {} impl<A, B> Monad<A, B> for Rc<A> {} impl<A, B> Monad<A, B> for Box<A> {} impl<A, B> Monad<A, B> for Option<A> {} impl<A, B, E: Clone> Monad<A, B> for Result<A, E> {} impl<A, B> Monad<A, B> for Vec<A> {}