Dav*_*ong 2 recursion ocaml types
我正在阅读这个 OCaml 文件,它包含以下内容:
type z = Z of z
Run Code Online (Sandbox Code Playgroud)
这看起来像 z 是无限递归的。它有什么用处以及我如何构建这样的类型?
我不认为这种类型特别有用,除非可能作为类型理论中的测试用例。
您可以构造如下类型的值:
# 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)