scalabook
Группа моноидов
Схема
Использование
Моноиды обычно используются для сворачивания последовательностей. Например, вот как можно посчитать произведение чисел:
trait Semigroup[A]: def combine(x: A, y: A): A
trait Monoid[A] extends Semigroup[A]: def empty: A
given Monoid[Int] with val empty = 1 def combine(x: Int, y: Int): Int = x * y
def fold[A](xs: List[A])(using m: Monoid[A]): A = xs.foldLeft(m.empty)(m.combine)
fold(List(1, 2, 3, 4, 5))// val res0: Int = 120
Более подробно применение моноидов рассматривается в книге Scala with Cats.
Обычно библиотеки определяют "свой" оператор для моноидальной операции combine
, например:
trait Semigroup[A]: def combine(x: A, y: A): A extension (x: A) def |+|(y: A) = combine(x, y)
...
3 |+| 4// val res1: Int = 12
Ссылки: