为什么使用这些重载运算符定义函数时没有错误?

Flu*_*lux 2 sml

我正在阅读Colin Myers、Chris Clack 和 Ellen Poon 所著的《Programming with Standard ML》 。在 \xc2\xa7 2.4.1受限多态函数中:

\n
\n

与运算符=and不同<>,其他比较运算符(><)是重载的;它们不受限制的多态性,因此以下定义失败:

\n
- fun wrong_ordered (x, y, z)\n     = (x < y) andalso (y < z);\nError: overloaded variable "<" cannot be resolved\n
Run Code Online (Sandbox Code Playgroud)\n

x发生此故障的原因是 SML 不知道、y和的类型z

\n
\n

当我将该定义输入 SML/NJ 110.99.2 和 Poly/ML 5.9 时,我没有收到任何错误消息。定义成功:

\n
- fun wrong_ordered (x, y, z) = (x < y) andalso (y < z);\nval wrong_ordered = fn : int * int * int -> bool\n
Run Code Online (Sandbox Code Playgroud)\n

为什么我没有得到作者所说的错误?

\n

And*_*erg 6

这本书早于 SML'97。在该语言版本中,重载运算符的类型解析得到了改进。特别是,重载类型现在默认为int无法通过上下文解析。