Я пишу переводчика для экспериментального языка. Три основные конструкции языка - это определения, утверждения и выражения. Определения могут содержать утверждения и выражения, операторы могут содержать определения и выражения, а один вид выражения может содержать утверждения. Я представляю все эти типы соединений, поэтому я могу легко использовать сопоставление шаблонов. В идеале, я хотел бы поместить код для них в разные файлы, но OMake жалуется на проблемы с круговой зависимостью. Насколько я знаю, описания круговых типов в разных модулях не допускаются.Работа с круговыми зависимостями в OCaml
Единственный способ, которым я знаю, чтобы решить эту проблему, чтобы определить все три типа сразу:
type defn = ...
and stmt = ...
and expr = ...
Похоже, это требует всего кода для типов, чтобы быть в том же файле. Есть ли способ обойти это? Как вы имеете дело с круговыми определениями в вашем коде?