我正在研究OCaml中的一个项目但是编译时遇到了问题。我有一个"未绑定的类型构造函数Door.position"。我用makefile编译。 door.mli:
module Door : sig
type position
type state
type door
val create : position -> state -> door
val getState : door -> state
val setState : door -> state -> door
val getPosition : door -> position
val setPosition : door -> position -> door
val isOpen : door -> bool
end;;
该文件包含错误case.mli:
module Case : sig
type case
val create : int -> int -> case
val getDoor : case -> Door.position -> Door.door
end;;
我不知道问题出在哪里。
答案 0 :(得分:3)
在OCaml中,放在文件foo.ml
(或foo.mli
)中的所有代码都隐式打包到模块Foo
中。在您的情况下,如果您的door.mli
包含名为Door
的模块,那意味着,从外部它只能以Door.Door
访问,即,您需要它的名称为文件。
简而言之,这意味着,在您的mli
文件中,您不需要编写module Door : sig
,因为它已隐含在那里。只需写下你的签名。