在 Haskell 中,您可以执行以下操作:
Prelude> data Foo = Foo Bar; data Bar = Bar Foo
你怎么能在 OCaml 中做同样的事情?我试过:
___
# type foo = Foo of bar;; type bar = Bar of foo;;
Error: Unbound type constructor bar
甚至可以在 OCaml 中定义相互递归的数据类型吗?如果不是那为什么?
将数据定义与 let 表达式进行比较:相互递归的数据类型对应于 using let rec
(或者更适合type rec
于需要更好的短语)。能够定义相互递归的数据类型有什么好处?我的 foobar 示例是微不足道的。您能想到相互递归数据类型的任何重要用途吗?