Использование ocaml 4.01.0 и core 111.17.00, как установлено opam.ocaml вложенные модули: реализация ml не соответствует интерфейсу cmi
У меня есть две проблемы, которые, вероятно, связаны с тем, что я сводился к следующим упрощенным модулям.
У меня есть внешний модуль (Zee здесь), который содержит внутренний модуль (Foo). Моя основная программа находится в xx.ml.
Первая проблема заключается в том, что, когда я строю, используя corebuild xx.byte
, я получаю сообщение об ошибке:
File "zee.ml", line 1:
Error: The implementation zee.ml does not match the interface zee.cmi:
The field `Foo' is required but not provided
Вторая проблема, которая может вытекать из что я делаю неправильно, чтобы вызвать эту ошибку, что если Я раскомментировать закомментированный код в xx.ml ниже, я получаю:
File "xx.ml", line 3, characters 23-32:
Error: Unbound module Zee.Foo
Я новичок в OCaml, но у меня есть другой код с вложенными модулями, которые, кажется, работает. Я не мог понять, что отличает эта ситуация, которая вызывает эти ошибки. Есть ли что-то в объявлении подписей модулей внутри других модулей, которые мне не хватает?
Вот код (отдельные файлы, как показано заголовками):
(**** zee.mli ****)
module type Foo = sig
val x : int
end
val bar : int
(**** zee.ml ****)
module Foo = struct
let x = 10
end
let bar = 20
(**** xx.ml ****)
open Core.Std
(*
let() = printf "%d\n" Zee.Foo.x
*)
let() =
printf "%d\n" Zee.bar
Полный выход из corebuild с кодом точно, как описано выше:
bash# rm -rf _build && corebuild xx.byte
ocamlfind ocamldep -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -modules xx.ml > xx.ml.depends
ocamlfind ocamldep -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -modules zee.mli > zee.mli.depends
ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -annot -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o zee.cmi zee.mli
ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -annot -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o xx.cmo xx.ml
ocamlfind ocamldep -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -modules zee.ml > zee.ml.depends
ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -annot -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o zee.cmo zee.ml
+ ocamlfind ocamlc -c -w A-4-33-40-41-42-43-34-44 -strict-sequence -g -annot -bin-annot -short-paths -thread -syntax camlp4o -package bin_prot.syntax -package sexplib.syntax,comparelib.syntax,fieldslib.syntax,variantslib.syntax -package core -o zee.cmo zee.ml
File "zee.ml", line 1:
Error: The implementation zee.ml does not match the interface zee.cmi:
The field `Foo' is required but not provided
Command exited with code 2.
Спасибо за указание отличия. Теперь я понимаю, почему у меня были проблемы в моем более крупном проекте. – bstpierre