У меня есть библиотека, в которой общие типы данных определены в модуле подписи (копирование этой подписи в реализацию не имеет смысла, поскольку оно не содержит никакой функции):Включить файл подписи (.mli) в библиотеке
(* b.mli *)
type bar = A of int | B of float
(* a.ml: *)
let foo = function B.A i -> B.A (i+1)
| B.B f -> B.B (f +. 1.)
(* c.mllib *)
A
B
в приведенной выше настройке, ocamlbuild не удается создать библиотеку с довольно неожиданной ошибкой:
[email protected] /tmp/test % ocamlbuild c.cmxa
Solver failed:
Ocamlbuild cannot find or build c.ml. A file with such a name would usually be a source file. I suspect you have given a wrong target name to Ocamlbuild.
можно построить без указания B внутри файла mllib, но бар типа становится абстрактным (который не предназначено). Есть ли способ включить подпись с помощью ocamlbuild?
Это имеет смысл. Вероятно, не стоит привыкать к использованию пакета, поскольку он не поддерживает псевдоним модуля. – nlucaroni