OCaml签名依赖性错误

时间:2014-01-10 21:32:33

标签: compilation dependencies ocaml signature

我有以下模块签名A

module type A =
 sig
  type exp =
    Int of int
    | Var of string
end;;

我可以编译以获取a.mlia.cmi文件。但是,如果我定义B

module type B =
 sig
  val compute : A.exp -> A.exp
 end;;

正在运行ocamlc -i b.ml会产生错误Unbound type constructor A.exp。那是为什么?

1 个答案:

答案 0 :(得分:1)

OCaml为您提供了一个免费的外部模块,对应于每个源文件。所以你要定义一个名为A.A的模块类型。请注意,它是模块类型,而不是模块。

你的a.ml(以及你喜欢的a.mli)可能只包含以下内容:

type exp = Int of int | Var of string

然后你可以从你的b.ml文件中引用A.exp。

另请注意,a.mli是文件。如果您有a.mli文件,则需要编译它以创建a.cmi。