我正在阅读这个OCaml文件,它包含以下内容:
type z = Z of z
看起来z是无限递归的。它是如何有用的,我如何构造这样一个类型?
我不认为这种类型特别有用,除非可能作为类型理论中的测试用例。
可以构造如下类型的值:
# let rec x = Z x;;
val x : z = Z <cycle>
# let rec q = Z (Z q);;
val q : z = Z (Z <cycle>)
一旦你有了这种类型的值,当然你可以很容易地构造其他值:
# let y = Z (Z x);;
val y : z = Z (Z (Z <cycle>))