haar_lib/algebra/
option.rs

1//! 単位元を追加したモノイド
2
3pub use crate::algebra::traits::*;
4use crate::impl_algebra;
5
6/// 単位元を追加したモノイド
7pub struct AppendId<M>(pub M);
8
9impl_algebra!({M: Set} AppendId<M>; set: Option<M::Element>; id: |_| None;);
10impl_algebra!({M: BinaryOp} AppendId<M>;
11    op: |s: &Self, a, b|
12        match (a, b) {
13            (Some(a), Some(b)) => Some(s.0.op(a, b)),
14            (a, None) => a,
15            (None, b) => b,
16    };
17);
18impl_algebra!({M: Associative} AppendId<M>; assoc;);
19impl_algebra!({M: Commutative} AppendId<M>; commu;);
20impl_algebra!({M: Idempotence} AppendId<M>; idem;);