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の例は些細なことです。相互に再帰的なデータ型の自明ではない使用法を思いつきますか?