0

半群必须是关联的,但我可以定义一个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. 是否有针对这种情况的保护措施,或者用户是否希望依靠测试来防止这种情况发生?

4

1 回答 1

4

不会有编译异常,即关联性属性不成立。换句话说,由您来确保它被正确实施。

但是如果你使用猫,你可以使用法则来确保半群和猫中定义的其他结构所需的所有属性。看看文档。您可以创建一个测试来检查您定义的半组是否正常:

class TreeLawTests extends AnyFunSuite with Discipline {
  checkAll("YourSemigroup[YourType].SemigroupLaws", SemigroupTests[YourSemigroup[YourType]].semigroup)
}
于 2020-02-27T17:24:07.477 回答