如何与SML和CM共享数据类型声明



在用CM编译的SML项目中,我有点困惑于在另一个SML文件中使用一个SML文件中的定义。似乎A.sml只能使用B.sml中的签名和结构定义,前提是它们已在project.cm文件中声明。

我想在B.sml中声明一个datatype MyType = MyConstr {name:string, other: string},并在A.sml中构造类型为MyType的值。如果我正确理解CM文档,我只能导出结构、签名、函子和函子签名。就代码重用而言,这听起来相当有限。

现在,这是否意味着我的MyType需要成为签名结构的一部分,以便我可以从另一个模块使用它?

(在顶级(您只能导出模块,这是正确的,但这并不意味着如果在.cm文件中描述了签名和结构定义,则只能在一个文件中使用它们——只是需要通过source(-)(或类似文件(直接或间接提及它们,以便在库外部使用。

假设您在A.sml中有一些想要在B.sml中使用的模块,并且您的唯一目标是从B.sml中暴露structure Foo,那么类似的东西

Library
structure Foo
is
A.sml
B.sml

应该足够了。如果您还没有阅读CM文档(第8-9页(的第2.5和2.6节,您可能还想阅读。

相关内容

  • 没有找到相关文章

最新更新