Functor

Trait Functor 

Source
pub trait Functor<K: ArrayKind, O1, A1, O2, A2> {
    // Required methods
    fn map_object(
        &self,
        a: &SemifiniteFunction<K, O1>,
    ) -> IndexedCoproduct<K, SemifiniteFunction<K, O2>>;
    fn map_operations(
        &self,
        ops: Operations<K, O1, A1>,
    ) -> OpenHypergraph<K, O2, A2>;
    fn map_arrow(
        &self,
        f: &OpenHypergraph<K, O1, A1>,
    ) -> OpenHypergraph<K, O2, A2>;
}
Expand description

Strict symmetric monoidal hypergraph functors

Required Methods§

Source

fn map_object( &self, a: &SemifiniteFunction<K, O1>, ) -> IndexedCoproduct<K, SemifiniteFunction<K, O2>>

Action on objects

Source

fn map_operations( &self, ops: Operations<K, O1, A1>, ) -> OpenHypergraph<K, O2, A2>

Action on tensoring of operations, i.e., compute F(f₀) ● F(f₁) ● .. ● F(fn) for generators f_i.

Source

fn map_arrow(&self, f: &OpenHypergraph<K, O1, A1>) -> OpenHypergraph<K, O2, A2>

Action on arrows. If you have implemented map_operations, you can implement this simply as define_map_arrow(self, f).

Implementors§

Source§

impl<F, R, K: ArrayKind + Debug, O1, A1, O2, A2> Functor<K, O1, A1, O2, A2> for Optic<F, R, K, O1, A1, O2, A2>
where F: Functor<K, O1, A1, O2, A2>, R: Functor<K, O1, A1, O2, A2>, K::Type<K::I>: NaturalArray<K>, K::Type<O1>: Array<K, O1> + PartialEq, K::Type<A1>: Array<K, A1>, K::Type<O2>: Array<K, O2> + PartialEq + Debug, K::Type<A2>: Array<K, A2>,

Source§

impl<F: Functor<O1, A1, O2, A2>, O1: Clone + PartialEq, A1: Clone, O2: Clone + PartialEq, A2: Clone> Functor<VecKind, O1, A1, O2, A2> for DynFunctor<F, O1, A1, O2, A2>

Source§

impl<K: ArrayKind, O, A> Functor<K, O, A, O, A> for Identity
where K::Type<K::I>: NaturalArray<K>, K::Type<O>: Array<K, O> + PartialEq, K::Type<A>: Array<K, A>,