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