fsharp lang 中是否有限制类型系统?

Dro*_*ker 0 f# type-systems

在 f# 中,操作“+”的函数签名是

5+6 //int->int->int
Run Code Online (Sandbox Code Playgroud)

但是当我编写如下代码时,它正在工作

6.0 + 3.0 //float->float->float
Run Code Online (Sandbox Code Playgroud)

OCaml 中的“+”与“+”不同。

5 + 5 //int->int->int
5.0 +. 5.0 // float->float->float
Run Code Online (Sandbox Code Playgroud)

它比 f# 更完美和限制,为什么 f# 做这个不完美的类型签名?为什么 f# 不支持“+.”?

对 f# 的功能感到困惑:(

Phi*_*ter 5

与 OCAML 不同,F# 允许通过使用称为静态解析类型参数的功能进行泛型算术,该功能类似于 Haskell 类型类。

+运营商可以在任何类型的定义中使用+的操作,它是专门用于各种.NET元,你可以在代码中看到了+ 这里。这意味着您可以为自定义类型开发一种算法,并在没有您自己的自定义运算符的情况下使其“正常工作”。

您可以在The Early History of F# 中了解导致这种变化的历史,第二篇标题为“F# 1.0 – 改进功能核心:重载算术”。