我有这段代码:
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
使用类型签名
(''a * ''a -> ''a) * ''a list -> ''a
看起来很简单,由于比较,它需要一个适用于相等类型的函数和一个相等类型列表作为参数xs = []
。但是,由于某种原因,它适用于输入,例如(op +, [2.3, 2.7, 4.0])
,当在 SML/NJ 中实数不是相等类型时。谁能帮我解释一下为什么会发生这种魔法?