В Haskell вы можете сделать следующее:Взаимно рекурсивные типы в OCaml
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 rec
(или более подходящим образом type rec
за отсутствием лучшей фразы). Каковы преимущества возможности определения взаимно-рекурсивных типов данных? Мой пример foobar тривиален. Можете ли вы придумать какие-либо нетривиальные виды использования взаимно-рекурсивных типов данных?
. Фактически, ваше определение второго типа не работает, он скажет, что определение типа является циклическим. Правильным способом будет «type» a t = Stream of (unit -> ('a *' a t) option) ' – ivg
О, кричит! Да, не проверял его в интерпретаторе. Исправлено сейчас, спасибо. –