OCaml 中的无限递归类型

Dav*_*ong 2 recursion ocaml types

我正在阅读这个 OCaml 文件,它包含以下内容:

type z = Z of z
Run Code Online (Sandbox Code Playgroud)

这看起来像 z 是无限递归的。它有什么用处以及我如何构建这样的类型?

Jef*_*eld 6

我不认为这种类型特别有用,除非可能作为类型理论中的测试用例。

您可以构造如下类型的值:

# let rec x = Z x;;
val x : z = Z <cycle>
# let rec q = Z (Z q);;
val q : z = Z (Z <cycle>)
Run Code Online (Sandbox Code Playgroud)

一旦您拥有该类型的值,您当然可以轻松构造其他值:

# let y = Z (Z x);;
val y : z = Z (Z (Z <cycle>))
Run Code Online (Sandbox Code Playgroud)