open_hypergraphs/strict/functor/
identity.rs

1use super::traits::*;
2use crate::strict::*;
3
4/// The identity functor, which implements [`Functor`] for any signature.
5pub struct Identity;
6
7impl<K: ArrayKind, O, A> Functor<K, O, A, O, A> for Identity
8where
9    K::Type<K::I>: NaturalArray<K>,
10    K::Type<O>: Array<K, O> + PartialEq,
11    K::Type<A>: Array<K, A>,
12{
13    fn map_object(
14        &self,
15        a: &SemifiniteFunction<K, O>,
16    ) -> IndexedCoproduct<K, SemifiniteFunction<K, O>> {
17        IndexedCoproduct::elements(a.clone())
18    }
19
20    fn map_arrow(&self, f: &OpenHypergraph<K, O, A>) -> OpenHypergraph<K, O, A> {
21        define_map_arrow(self, f)
22    }
23
24    fn map_operations(
25        &self,
26        ops: crate::operations::Operations<K, O, A>,
27    ) -> OpenHypergraph<K, O, A> {
28        OpenHypergraph::tensor_operations(ops)
29    }
30}