scalabook
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()
Ссылки: