Полугруппа должна быть ассоциативной, но я мог бы определить Semigroup
как:
trait Semigroup[T] {
def op(t1:T, t2:T) : T
}
def plus = new Semigroup[Int] { def op(t1:Int, t2:Int) = t1 - t2 }
Я могу реализовать plus
, который не является ассоциативным, но класс по-прежнему остается Semigroup
. Предусмотрена ли защита от этого или ожидается, что пользователь будет полагаться на тестирование, чтобы предотвратить это?