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