OCaml 中 "int/2" 的类型是什么

What is the type "int/2" in OCaml

当我在交互环境(OCamlutop中执行以下命令时,所有"int"类型的表达式结果都是"int/2"类型.此行为可以复制如下。

# 3;;
- : int = 3

# type int;;
type int

# type a;;
type a

# 3;;
- : int/2 = 3

有人知道为什么会这样吗?谢谢!

2020 年 3 月 2 日编辑:

我发现如果我执行以下操作,"int/2" 将不会出现。谁能解释一下这里发生了什么?

# 3;;
- : int = 3

# type int;;
type int

# 3;;
- : int = 3

更新:OCaml版本4.08.1在上述案例中使用。

常量 3 是内置类型 int,它不是范围内的类型 int。所以顶层附加一个数字来表示这个事实。否则事情会变得非常混乱。也就是说,您可以获得 "a value was expected of type int but this value is of type int" 之类的消息。使用 /n 标签,它更清楚地说 "a value was expected of type int/n (one kind of int) but this value is of type int/m (another different kind of int)"

OCaml 4.08.0 中似乎添加了此行为。您可以在此处找到对该功能的讨论:https://github.com/ocaml/ocaml/pull/1120

更新

您应该显示您的 OCaml 版本。此功能是最近添加的,您可能会遇到有或没有此功能的顶层。

无论如何,在我使用 OCaml 4.10.0

的测试中,您的两个示例都使用了 int/n 符号
$ ocaml
        OCaml version 4.10.0
# 3;;
- : int = 3
# type int;;
type int
# type a;;
type a
# 3;;
- : int/2 = 3

$ ocaml
        OCaml version 4.10.0
# 3;;
- : int = 3
# type int;;
type int
# 3;;
- : int/2 = 3

(也有可能在 OCaml 4.10.0 中使此行为更加一致。)