如何比较泛型类型的值?

gre*_*man 2 generics sml

考虑这样的代码:

fun equals(a : 'a,b : 'a) =
  a = b;
Run Code Online (Sandbox Code Playgroud)

我的代码更大,但这是问题所在.SML报告"错误:运算符和操作数不同意".

我是SML的初学者,我不知道为什么抱怨.这是否类似于C#问题,您无法真正比​​较任何类型的两个值,但您必须使用类型的默认相等比较器?我应该添加一些约束'a(我希望我正确地写为通用类型)?

Tay*_*can 9

而不是'a,使用''a.

前面带有两个引号而不是一个引号的类型是相等类型,这意味着=操作符对它起作用.这也意味着你不能在非等同类型的东西上调用你的函数.

此外,您实际上不必编写类型.如果你这样做:

fun equals (a,b) = a = b;
Run Code Online (Sandbox Code Playgroud)

SML将推断出类型.