1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//! 作用モノイド。

use super::binop;

use binop::{Magma, Monoid};

/// 作用モノイド。
pub trait MonoidAction {
    /// 作用を行う型。
    type Operator: Monoid;
    /// 作用される型。
    type Operand: Monoid;

    fn operator(&self) -> &Self::Operator;
    fn operand(&self) -> &Self::Operand;
    /// 作用を行う。
    fn act(
        &self,
        x: <Self::Operand as Magma>::Set,
        op: <Self::Operator as Magma>::Set,
    ) -> <Self::Operand as Magma>::Set;
}