use super::{Addition, Group, GroupAdd, GroupMul, Multiplication, Operator};
pub trait AbelianGroup<O: Operator>: Group<O> {}
macro_rules! impl_abeliangroup(
($T:ty, $($S:ty),*) =>
{
$(
impl AbelianGroup<$T> for $S
{
}
)*
}
);
impl_abeliangroup!(Addition, i8, i16, i32, i64, i128, f32, f64);
impl_abeliangroup!(Multiplication, f32, f64);
pub trait AbelianGroupAdd: AbelianGroup<Addition> + GroupAdd {}
macro_rules! impl_abeliangroupadd
(
($($T:ty),*) =>
{
$(
impl AbelianGroupAdd for $T
{
}
)*
}
);
impl_abeliangroupadd!(i8, i16, i32, i64, i128, f32, f64);
pub trait AbelianGroupMul: AbelianGroup<Multiplication> + GroupMul {}
macro_rules! impl_abeliangroupmul
(
($($T:ty),*) =>
{
$(
impl AbelianGroupMul for $T
{
}
)*
}
);
impl_abeliangroupmul!(f32, f64);