use crate::Primitives;
pub trait StructuralOperad<P: Primitives> {
type StructuralOperadTarget: StructuralOperad<P>;
fn operad_structure(&self) -> &Self::StructuralOperadTarget;
}
pub trait OperadComposition<P: Primitives> {
type TypeDefinition: crate::user::type_::TypeDefinition<P>;
fn outer_type(&self) -> &Self::TypeDefinition;
fn inner_type(&self) -> &Self::TypeDefinition;
fn composed_type(&self) -> &Self::TypeDefinition;
fn composed_site_count(&self) -> P::NonNegativeInteger;
type GroundingMap: crate::user::morphism::GroundingMap<P>;
fn composed_grounding(&self) -> &Self::GroundingMap;
}