PlusEmpty
Формальное определение
Универсальный количественный моноид.
PlusEmpty
должен удовлетворять законам моноида:
- Associativity (ассоциативность):
(x + y) + z = x + (y + z)
- Identity (тождественность): существует
e ∈ M
такое, чтоe + x = x + e = x
Определение в виде кода на Scala
trait PlusEmpty[F[_]] extends Plus[F]:
self =>
def empty[A]: F[A]
def monoid[A]: Monoid[F[A]] =
new Monoid[F[A]]:
override def combine(f1: F[A], f2: F[A]): F[A] = plus(f1, f2)
override def empty: F[A] = self.empty[A]
Примеры
Связанный список
given PlusEmpty[List] with
def plus[A](fa1: List[A], fa2: => List[A]): List[A] = fa1 ++ fa2
def empty[A]: List[A] = List.empty[A]
Реализация
Реализация в ScalaZ
import scalaz.*
import Scalaz.*
// ... Все операции родителей
(PlusEmpty[List].empty: List[Int]) // List()
Ссылки: