Trait fmap::NestedMonad
source · pub trait NestedMonad<'a, A>where
Self: Monad<'a, <Self::InnerMonad as Functor<'a, A>>::Inner> + Functor<'a, <Self::InnerMonad as Functor<'a, A>>::Inner, Inner = A, Mapped = A>,
A: 'a,{
type InnerMonad: Functor<'a, A>;
// Provided method
fn mjoin(self) -> A { ... }
}
Expand description
Nested monad that can be joined
This trait is automatically implemented for nested monads with type
parameter A
being the inner monad.
Examples
use fmap::NestedMonad;
fn my_mjoin<'a, M: NestedMonad<'a, A>, A>(m: M) -> A
where
M: NestedMonad<'a, A>,
A: 'a,
{
m.bind(|x| x)
}
let nested = vec![vec![1, 3], vec![2, 9, 9]];
assert_eq!(my_mjoin(nested.clone()), vec![1, 3, 2, 9, 9]);
assert_eq!(nested.mjoin(), vec![1, 3, 2, 9, 9]);
Required Associated Types§
sourcetype InnerMonad: Functor<'a, A>
type InnerMonad: Functor<'a, A>
Helper type always equal to A
This type is needed to circumvent Rust issue #20671.