Compilation OCaml签名依赖项错误

Compilation OCaml签名依赖项错误,compilation,dependencies,ocaml,signature,Compilation,Dependencies,Ocaml,Signature,我有以下模块签名A: module type A = sig type exp = Int of int | Var of string end;; 我能够编译它以获得a.mli和a.cmi文件。但是,如果我定义B: module type B = sig val compute : A.exp -> A.exp end;; 运行ocamlc-ib.ml会产生错误未绑定类型构造函数A.exp。这是为什么呢?OCaml免费为您提供了一个与每个源文件对应的外部

我有以下模块签名
A

module type A =
 sig
  type exp =
    Int of int
    | Var of string
end;;
我能够编译它以获得
a.mli
a.cmi
文件。但是,如果我定义
B

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

运行
ocamlc-ib.ml
会产生错误
未绑定类型构造函数A.exp
。这是为什么呢?

OCaml免费为您提供了一个与每个源文件对应的外部模块。因此,您正在定义一个名为a.a.的模块类型。请注意,它是一个模块类型,而不是一个模块

您的a.ml(和a.mli,如果您愿意)可能只包含以下内容:

type exp = Int of int | Var of string
然后可以从b.ml文件中引用A.exp


另外,请注意a.mli是一个源文件。如果您有一个a.mli文件,您需要编译它来创建一个.cmi。

是否可以通过某种方式使用签名来创建它,但要避免
a.a
?我试图从一些代码中复制签名,这些代码我没有源代码,只有签名。虽然您的方法适用于上述类型定义,但我不知道如何对
val
执行此操作。