类实例
我们的 Eq 类定义一个简单的代数,该代数指定等价关系及其语义的接口。我们必须使用 instance 填充代数。
instance Eq[int] {
fun == : int * int -> bool = "$1==$2";
}
这里我们为参数类型定义了Eq类的实例 int . 我们的代码 器具 Eq类接口,通过定义所有非默认的虚拟方法。
在这种情况下,定义是通过使用绑定将实现委托给C++。
我们希望平等 double 也:
instance Eq[double] {
fun == double * double -> bool = "$1==$2";
fun != double * double -> bool = "$1!=$2";
}
在这里,我们选择同时定义 != 函数,重写类中提供的默认值。
提供实例时,通常要确保所有类方法都有一个定义。必须注意避免循环定义,因为这将导致在运行时无限递归。