Я пытаюсь понять специфику модулей ocaml и их компиляции:
am Я вынужден переопределять типы, уже объявленные в .mli
внутри конкретных реализаций .ml
?
Просто чтобы привести пример:
(* foo.mli *)
type foobar = Bool of bool | Float of float | Int of int
(* foo.ml *)
type baz = foobar option
Это, в соответствии с моим обычным мышлением о интерфейсах/реализациях, должно быть в порядке, но оно говорит
Ошибка: конструктор несвязанного типа foobar
при попытке скомпилировать с помощью
ocamlc -c foo.mli
ocamlc -c foo.ml
Конечно, ошибка исчезает, если я объявляю foobar
внутри foo.ml
тоже, но это кажется сложным способом, так как я должен держать вещи синхронизированными при каждом изменении.
Есть ли способ избежать этой избыточности или я вынужден каждый раз обновлять типы?
Заранее спасибо