Коммутативный моноид

CMonoid[A] - моноид, который коммутативен.

Помимо законов моноида:

должен соблюдаться закон:

Код

trait CMonoid[A] extends Monoid[A], CSemigroup[A]

Законы

Законы наследуются от моноида и коммутативной полугруппы.

Схема

classDiagram
    class Semigroup~A~{
        +combine(x: A, y: A) A
    }  
    class Monoid~A~{
        +empty() A
    }
    Semigroup <|-- Monoid
    class CommutativeSemigroup~A~
    Semigroup <|-- CommutativeSemigroup  
    class CommutativeMonoid~A~
    Monoid <|-- CommutativeMonoid
    CommutativeSemigroup <|-- CommutativeMonoid

Реализация в библиотеках

Реализация в Spire

CMonoid[A] - моноид, который коммутативен.

import spire.algebra.CMonoid

CMonoid.combine(100, CMonoid.empty[Int]) // 100

Ссылки: