使用opam安装的ocaml 4.01.0和核心111.17.00。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 2014-09-05 11:51:13