use std::fmt::Debug;
use crate::utils::num_traits::Bounded;
use crate::algebraic_structure::{monoid::Monoid, operation::*};
pub trait CommutativeMonoid: Monoid {}
impl CommutativeMonoid for () {}
impl CommutativeMonoid for Add<isize> {}
impl CommutativeMonoid for Add<usize> {}
impl CommutativeMonoid for Xor {}
impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Min<T> {}
impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Max<T> {}
impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for MinMax<T> {}
impl<T> CommutativeMonoid for GCD<T> {}