composition
docs
This commit is contained in:
parent
d873e33768
commit
445e45ddc9
@ -1,3 +1,5 @@
|
|||||||
|
//! [Functor]s derived on compositions of other [Functor]s.
|
||||||
|
|
||||||
use crate::func::*;
|
use crate::func::*;
|
||||||
|
|
||||||
pub struct CompositionInstance<U, V>(U, V);
|
pub struct CompositionInstance<U, V>(U, V);
|
||||||
@ -26,6 +28,7 @@ impl<'a, U: Pure<'a>, V: Pure<'a>> Pure<'a> for CompositionInstance<U, V> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Note: depends on the outer instance being [`ApplicativeLA2`] not [`ApplicativeSeq`].
|
||||||
impl<'a, U: ApplicativeLA2<'a>, V: ApplicativeSeq<'a>> ApplicativeSeq<'a>
|
impl<'a, U: ApplicativeLA2<'a>, V: ApplicativeSeq<'a>> ApplicativeSeq<'a>
|
||||||
for CompositionInstance<U, V>
|
for CompositionInstance<U, V>
|
||||||
{
|
{
|
||||||
@ -54,6 +57,7 @@ impl<'a, U: ApplicativeTuple<'a>, V: ApplicativeTuple<'a>> ApplicativeTuple<'a>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Note: depends on the inner instance being [`Functor`] not [`ApplicativeSelect`].
|
||||||
impl<'a, U: ApplicativeSelect<'a>, V: Functor<'a>> ApplicativeSelect<'a>
|
impl<'a, U: ApplicativeSelect<'a>, V: Functor<'a>> ApplicativeSelect<'a>
|
||||||
for CompositionInstance<U, V>
|
for CompositionInstance<U, V>
|
||||||
{
|
{
|
||||||
@ -87,6 +91,13 @@ impl<'a, U: Monad<'a>, V: Monad<'a> + LocalFunctor<'a>> Monad<'a> for Compositio
|
|||||||
U::iterate(ComposedIterative(f))
|
U::iterate(ComposedIterative(f))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Basis for how composition can be a [Monad].
|
||||||
|
///
|
||||||
|
/// ```text
|
||||||
|
/// U V U V A
|
||||||
|
/// U U V V A
|
||||||
|
/// U V A
|
||||||
|
/// ```
|
||||||
fn join<A: 'a>(ffa: Self::F<Self::F<A>>) -> Self::F<A> {
|
fn join<A: 'a>(ffa: Self::F<Self::F<A>>) -> Self::F<A> {
|
||||||
U::join(U::fmap(|ufa| U::fmap(V::join, V::stuff::<_, U>(ufa)), ffa))
|
U::join(U::fmap(|ufa| U::fmap(V::join, V::stuff::<_, U>(ufa)), ffa))
|
||||||
}
|
}
|
||||||
@ -116,6 +127,7 @@ impl<
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Note: fails in the inner instance not outer.
|
||||||
impl<'a, E: 'a, U: Monad<'a>, V: Fail<'a, E> + LocalFunctor<'a>> Fail<'a, E>
|
impl<'a, E: 'a, U: Monad<'a>, V: Fail<'a, E> + LocalFunctor<'a>> Fail<'a, E>
|
||||||
for CompositionInstance<U, V>
|
for CompositionInstance<U, V>
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user