use crate::HostTypes;
pub trait MonoidalProduct<H: HostTypes> {
type ComputationDatum: crate::user::morphism::ComputationDatum<H>;
fn left_operand(&self) -> &Self::ComputationDatum;
fn right_operand(&self) -> &Self::ComputationDatum;
type Datum: crate::kernel::schema::Datum<H>;
fn composed_result(&self) -> &Self::Datum;
fn saturation_value(&self) -> H::Decimal;
}
pub trait MonoidalUnit<H: HostTypes> {
type Certificate: crate::bridge::cert::Certificate<H>;
fn unit_witness_ref(&self) -> &Self::Certificate;
}
pub trait MonoidalAssociator<H: HostTypes> {
type MonoidalProduct: MonoidalProduct<H>;
fn associator_left(&self) -> &Self::MonoidalProduct;
fn associator_right(&self) -> &Self::MonoidalProduct;
type Certificate: crate::bridge::cert::Certificate<H>;
fn associator_witness_ref(&self) -> &Self::Certificate;
}