从Why is OCaml's (+) not polymorphic?,Keith said:
ygrek还说:
有人可以解释一下OCaml中存在什么“许多细微的错误”,以及F#除了发明解决静态解析类型的方法之外,F#还必须做什么?
最佳答案
这些错误在OCaml中不存在。它们以C之类的语言存在,并通过区分不同的数值类型在OCaml中进行了修复。但是,正如Keith后来所暗示的那样,问题不是算术运算符重载,而是所谓的“提升”。您可以摆脱升职,但仍然拥有重载的算术运算符(F#可以做到这一点,并且效果非常好)。
这两个极端不是像OCaml这样的重载,也不是像Haskell中的类型类那样的完全重载。两种极端都有缺点。 F#选择了中间立场,其中一些运算符和函数可以重载,而其他一些不能重载,并且所有重载都必须在编译时解决。这比OCaml或Haskell解决方案要复杂得多,但这是一个务实的折衷方案:您可以得到可预见的快速简单代码。但是,类型推断更加复杂(您必须多次指定类型),代码不再组成(剪切和粘贴代码会导致推断不同的类型,从而破坏代码),并且您需要记住哪些可以重载,哪些不能重载。 。