use crate::algebraic_structure::{monoid::Monoid, operation::*};
pub trait OrderedMonoid: Monoid {
fn lt(left: &Self::Val, right: &Self::Val) -> bool;
fn le(left: &Self::Val, right: &Self::Val) -> bool;
}
impl OrderedMonoid for Add<isize> {
fn lt(left: &Self::Val, right: &Self::Val) -> bool {
left < right
}
fn le(left: &Self::Val, right: &Self::Val) -> bool {
left <= right
}
}
impl OrderedMonoid for Add<usize> {
fn lt(left: &Self::Val, right: &Self::Val) -> bool {
left < right
}
fn le(left: &Self::Val, right: &Self::Val) -> bool {
left <= right
}
}