在用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节,您可能还想阅读。