考虑这样的代码:
fun equals(a : 'a,b : 'a) =
a = b;
Run Code Online (Sandbox Code Playgroud)
我的代码更大,但这是问题所在.SML报告"错误:运算符和操作数不同意".
我是SML的初学者,我不知道为什么抱怨.这是否类似于C#问题,您无法真正比较任何类型的两个值,但您必须使用类型的默认相等比较器?我应该添加一些约束'a(我希望我正确地写为通用类型)?
而不是'a,使用''a.
前面带有两个引号而不是一个引号的类型是相等类型,这意味着=操作符对它起作用.这也意味着你不能在非等同类型的东西上调用你的函数.
此外,您实际上不必编写类型.如果你这样做:
fun equals (a,b) = a = b;
Run Code Online (Sandbox Code Playgroud)
SML将推断出类型.