garfield 0.1.0

Garfield provides cat-egory theory abstractions
Documentation
use crate::applicative::Applicative;

pub trait Monad: Applicative {
    fn bind<B, F: Fn(Self::Inner) -> Self::Wrapped<B>>(
        ma: Self::Wrapped<Self::Inner>,
        f: F,
    ) -> Self::Wrapped<B>;

    fn r#return(a: Self::Inner) -> Self::Wrapped<Self::Inner> {
        Self::pure(a)
    }
}

impl<A> Monad for Option<A> {
    fn bind<B, F: Fn(Self::Inner) -> Self::Wrapped<B>>(
        ma: Self::Wrapped<Self::Inner>,
        f: F,
    ) -> Self::Wrapped<B> {
        match ma {
            Some(a) => f(a),
            None => None,
        }
    }
}