pub trait LatticeBimorphism<LatA, LatB> {
    type Output;

    // Required method
    fn call(&mut self, lat_a: LatA, lat_b: LatB) -> Self::Output;
}
Expand description

Semilattice bimorphism. Lattice merge must distribute over this binary function, in both arguments.

Use crate::test::check_lattice_bimorphism to spot-test an implementation.

See the lattice math doc’s lattice bimorphism section.

Required Associated Types§

source

type Output

The output lattice type.

Required Methods§

source

fn call(&mut self, lat_a: LatA, lat_b: LatB) -> Self::Output

Executes the function.

Implementors§

source§

impl<MapA, MapB, MapOut, ValFunc> LatticeBimorphism<MapUnion<MapA>, MapUnion<MapB>> for KeyedBimorphism<MapOut, ValFunc>
where ValFunc: LatticeBimorphism<MapA::Item, MapB::Item>, MapA: MapIter + SimpleKeyedRef + SimpleCollectionRef, MapB: for<'a> GetKeyValue<&'a MapA::Key, Key = MapA::Key> + SimpleCollectionRef, MapA::Key: Clone + Eq, MapA::Item: Clone, MapB::Item: Clone, MapOut: Default + MapInsert<MapA::Key> + Collection<Item = ValFunc::Output>,

§

type Output = MapUnion<MapOut>

source§

impl<SetA, SetB, SetOut> LatticeBimorphism<SetUnion<SetA>, SetUnion<SetB>> for CartesianProductBimorphism<SetOut>
where SetA: IntoIterator, SetB: Iter + SimpleCollectionRef, SetA::Item: Clone, SetB::Item: Clone, SetOut: FromIterator<(SetA::Item, SetB::Item)>,

§

type Output = SetUnion<SetOut>