我有这段代码:
fun foldr2(f, x::xs) =
if xs = [] then
x
else
f(x, foldr2(f, xs))
Run Code Online (Sandbox Code Playgroud)
带有类型签名
(''a * ''a -> ''a) * ''a list -> ''a
Run Code Online (Sandbox Code Playgroud)
由于xs = []比较,它看起来很直接,它需要一个适用于相等类型的函数和一个相等类型的列表作为参数.但是,由于某些原因,它适用于输入,例如(op +, [2.3, 2.7, 4.0]),当在SML/NJ实时中不是相等类型时.任何人都可以帮助我解释为什么这种魔法发生?