Monoid
概要
2つのデータに対しての演算して1つにできる
任意の個数のデータを一つの値に折り畳める
群(Group)になると逆の操作(逆元)が存在することも条件に加わるため制約が厳しくなる
プログラミングしているとモノイドくらいが丁度よく出てくる。
catsではthe type class, the instances, and the interfaceが実装されている
interfaceはシンタックスシュガー
モノイドの利点
モノイドであるということはどこの部分からでも計算可能ということ(結合法則)
Map-Reduce
分散処理できる
条件
対象と演算の組み合わせ
単位元
結合法則
例
整数と足し算
整数と掛け算
文字列と結合
リストと結合
真偽値とand
真偽値とor
Scala
code:scala
def combine(x: A, y: A): A
def empty: A
}
trait MonoidA extends SemigroupA { def empty: A
}
import cats.instances.string._ // for Monoid
import cats.syntax.semigroup._ // for |+|
val stringResult = "Hi " |+| "there" |+| MonoidString.empty