半群必须是关联的,但我可以定义一个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
. 是否有针对这种情况的保护措施,或者用户是否希望依靠测试来防止这种情况发生?
半群必须是关联的,但我可以定义一个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
. 是否有针对这种情况的保护措施,或者用户是否希望依靠测试来防止这种情况发生?
不会有编译异常,即关联性属性不成立。换句话说,由您来确保它被正确实施。
但是如果你使用猫,你可以使用法则来确保半群和猫中定义的其他结构所需的所有属性。看看文档。您可以创建一个测试来检查您定义的半组是否正常:
class TreeLawTests extends AnyFunSuite with Discipline {
checkAll("YourSemigroup[YourType].SemigroupLaws", SemigroupTests[YourSemigroup[YourType]].semigroup)
}