类实例

我们的 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";
}

在这里,我们选择同时定义 != 函数,重写类中提供的默认值。

提供实例时,通常要确保所有类方法都有一个定义。必须注意避免循环定义,因为这将导致在运行时无限递归。