Пакет Batteries.Num переопределяет функции (+), (-), ... Таким образом, компилятор выдает ошибку в следующем простом коде
open Batteries
open Num
let a = 4 + 4;;
Файл «a.ml», строка 3, символы 8–9: Ошибка: это выражение имеет тип int, но ожидалось выражение типа Batteries.Num.num = Num.num
Компилирую с помощью "ocamlfind ocamlc -package батарейки a.ml".
РЕДАКТИРОВАТЬ: Я знаю, что могу использовать Pervasives. (+) Или просто открыть Num локально.
Но я могу успешно скомпилировать эту программу с помощью ocamlbuild с простейшим файлом _tags: ‹*>: pkg_batteries, package (батарейки), package (num)
Где волшебство? Как я могу скомпилировать, как ocamlbuild, с помощью Makefile?
РЕДАКТИРОВАТЬ: Я нашел решение. На самом деле у меня было две версии батарей (1.4 и 2.2), и ocamlfind дал версию 2.2 в командной строке и 1.4 в ocamlbuild. Не знаю почему. Я считаю, что в ранней версии батарей не было переопределения модуля Num (но вам приходилось использовать BatNum), поэтому проблема не возникает со старой версией. Спасибо за ответы.