1pub use crate::algebra::traits::*;
3use crate::impl_algebra;
4
5#[derive(Clone, Copy, Default, Debug, PartialEq, Eq, PartialOrd, Ord, Hash)]
7pub struct Dual<S>(pub S);
8
9impl_algebra!({S: Set} Dual<S>; set: S::Element;);
10impl_algebra!({S: BinaryOp} Dual<S>; op: |s: &Self, a, b| s.0.op(b, a););
11impl_algebra!({S: Identity} Dual<S>; id: |s: &Self| s.0.id(););
12impl_algebra!({S: Inverse} Dual<S>; inv: |s: &Self, a| s.0.inv(a););
13impl_algebra!({S: Commutative} Dual<S>; commu;);
14impl_algebra!({S: Associative} Dual<S>; assoc;);
15impl_algebra!({S: Idempotence} Dual<S>; idem;);