cp_library_rs/algebraic_structure/
commutative.rs1use crate::algebraic_structure::{monoid::Monoid, operation::*};
4
5use std::fmt::Debug;
6
7use num_traits::Bounded;
8
9pub trait CommutativeMonoid: Monoid {}
19
20impl CommutativeMonoid for () {}
22impl CommutativeMonoid for Add<isize> {}
23impl CommutativeMonoid for Add<usize> {}
24impl CommutativeMonoid for Xor {}
25impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Min<T> {}
26impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for Max<T> {}
27impl<T: Ord + Bounded + Clone + Debug> CommutativeMonoid for MinMax<T> {}
28impl<T> CommutativeMonoid for GCD<T> {}