如何解决如何在 OCaml 中“公开”类型
在第一个编译单元中,我在 moduleA.mli
中有以下内容:
module A : sig
type t
...
end
在 moduleA.ml
中我有:
module A = struct
type t = float * float
...
end
在第二个编译单元中,moduleB.mli
中有以下内容:
module B : sig
type t
...
end
在 moduleB.ml
中我有:
open moduleA
module B = struct
type t = A.t
...
end
This expression has type moduleB.B.t but an expression was expected of type moduleA.A.t
然而,正如我所定义的,这些应该是同义词(两者都是 float * float
)。我怎样才能“公开”这些类型,以便 Ocaml 知道它们是相同的?
解决方法
当你把一个模块拆分成一个签名和一个实现时,只有签名中的信息可以被其他模块使用,其他任何东西都是实现私有的。因此,当其他模块查看您的模块 A
和 B
时,他们看到的只是 type t
和另一个 type t
,并且他们不知道它们指的是同一类型。
如果您想公开 A.t = B.t
的信息,该信息需要成为签名的一部分。因此,只需将 type t
的签名中的 B
更改为 type t = A.t
,现在这种相等性将成为模块公共接口的一部分,并且可以被其他模块依赖。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。