Macro alga::impl_abelian [] [src]

macro_rules! impl_abelian {
    (<$M:ty> for $($T:tt)+) => { ... };
}

Implements the abelian group trait for types provided.

Examples

#[derive(PartialEq, Clone)]
struct Wrapper<T>(T);

impl<T: AbstractMagma<Additive>> AbstractMagma<Additive> for Wrapper<T> {
    fn operate(&self, right: &Self) -> Self {
        Wrapper(self.0.operate(&right.0))
    }
}

impl<T: Inverse<Additive>> Inverse<Additive> for Wrapper<T> {
    fn inverse(&self) -> Self {
        Wrapper(self.0.inverse())
    }
}

impl<T: Identity<Additive>> Identity<Additive> for Wrapper<T> {
    fn identity() -> Self {
        Wrapper(T::identity())
    }
}

impl_abelian!(<Additive> for Wrapper<T> where T: AbstractGroupAbelian<Additive>);