【问题标题】:Resolving module name conflicts, need to get at ORD_MAP signature解决模块名冲突,需要获取ORD_MAP签名
【发布时间】:2014-08-22 09:17:39
【问题描述】:

我正在开发一个相对较大的 SML 代码库。它最初是用 MLton 编译的,但我现在在 SML/NJ 下使用它。我需要使用RedBlackMapFn,它在smlnj-lib.cm 中定义。但是,我收到一个错误:

elaborate/elaborate-bomenv.fun:9.20-9.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:14.21-14.40 Error: unbound functor: RedBlackMapFn
elaborate/elaborate-bomenv.fun:32.20-32.27 Error: unbound signature: ORD_KEY
elaborate/elaborate-bomenv.fun:37.21-37.40 Error: unbound functor: RedBlackMapFn

所以我假设smlnj-lib.cm 没有被CM 拉动。为了解决这个问题,我将$/smlnj-lib.cm 添加到我正在工作的目录中的sources.cm 文件中。这会导致一个单独的问题:

elaborate/sources.cm:25.1-25.18 Error: structure Random imported from $SMLNJ-LIB/Util/smlnj-lib.cm@243997(random.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.sml
elaborate/sources.cm:25.1-25.18 Error: structure Queue imported from $SMLNJ-LIB/Util/smlnj-lib.cm@436143(queue.sml) and also from ./(sources.cm):lib/(sources.cm):basic/(sources.cm):two-list-queue.sml

没有骰子。我尝试删除来自./(sources.cm):lib/(sources.cm):basic/(sources.cm):random.smlRandom 结构,但它似乎不等同于标准库中定义的结构,所以我不能只用一个替换另一个。

我想使用类似 Python 的 import ... from ... as ... 为来自标准库的Random 赋予新名称的机制,但CM 的documentation 没有提供任何关于我将如何去做的提示。

如何解决跨多个 SML 文件的模块命名冲突?

【问题讨论】:

  • @newacct 不正确,看起来 CM 不会拉入 $/smlnj-lib.cm 如果它会导致命名冲突(就像对我来说一样)。我可以在我编写的其他 SML 代码中找到RedBlackMapFn,但在这个项目中没有。
  • 可能是一个将RedBlackMapFn 包装在单独编译的模块中的函数,该函数实现了隐藏random 的第二个声明的签名? 免责声明:这是评论而非答案是有原因的。
  • @benrudgers 我最终将需要RedBlackMapFn 的文件拆分为一个单独的.cm 文件,并且有效。不过有点丑。很高兴知道是否有更好的方法。
  • 很高兴你能成功。您是否考虑过将其发布为答案?
  • @benrudgers 我希望其他人有更好的主意,但当然,我现在就发布。

标签: sml smlnj


【解决方案1】:

我最终将有问题的文件拆分为单独的.cm。这里的问题文件是elaborate-bomenv.{sig, fun}。这个目录的.cm文件是sources.cm,它看起来像这样导致错误:

Group
...
is

$/basis.cm
...
elaborate-bomenv.fun
elaborate-bomenv.sig
...

因此,我创建了一个elaborate-bomenv-sources.cm,看起来像:

Group

signature ELABORATE_BOMENV
functor BOMEnv

is

$/smlnj-lib.cm
...
elaborate-bomenv.sig
elaborate-bomenv.fun

并将原来的sources.cm改为:

Group
...
is

$/basis.cm
...
./elaborate-bomenv-sources.cm
...

这很丑陋,但它有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-31
    • 2011-08-21
    • 2011-07-17
    • 1970-01-01
    相关资源
    最近更新 更多