gpt4 book ai didi

sml - 解决 SML/NJ 编译管理器中的库冲突

转载 作者:行者123 更新时间:2023-12-05 00:57:20 32 4
gpt4 key购买 nike

我正在使用 SML/NJ 110.79,其中包括对 Successor ML 项目定义的新结构的支持。其中, Fn 结构体。

碰巧的是,我已经在 my personal project with utilities 之一中拥有了一个同名结构。 ,在 110.79 之前运行良好。

对于 110.79,对于这个 .cm 文件:

group is
$/basis.cm
$SMACKAGE/sml-extras/v0.1.0/sources.sml.cm

但是,我收到以下错误:

sources.cm:3.3-3.45 Error: structure Fn imported from $SMLNJ-BASIS/(basis.cm):basis-common.cm@155252(fn.sml) and also from $SMACKAGE/sml-extras/v0.1.0/(sources.sml.cm):src/fn.sml



有谁知道如何通过编译管理器解决这个冲突。理想情况下,我的 Fn结构将能够“扩展”标准 Fn通过 open -ing 它,但是使用 sml-extras 库的项目将看不到标准 Fn结构,只有我的扩展版本。

这可能吗?我是否需要在我的 sml-extras.cm 项目中包装/重新导出整个 basic.cm 库?

最佳答案

我设法通过使用我认为在 CM manual 中称为管理库的东西来解决这个问题。 ,§2.9。

这意味着创建一个辅助 .cm 文件来包装基础库并仅重新导出我们感兴趣的符号。

来源.cm

这是主要的项目文件。

library
structure Main
is
(* Let's say this library redefines the Fn and Ref structures *)
(* and the REF signature. *)
$SMACKAGE/sml-extras/v0.1.0/sources.sml.cm

(* This excludes out Fn, Ref and REF from the Basis library, but *)
(* imports anything else. *)
amended-basis.cm

main.sml

修正基础.cm

此文件导入 $/basis.cm然后将其全部重新导出, Fn 除外, RefREF .
group
library($/basis.cm) - (
structure Fn
structure Ref
signature REF
)
is
$/basis.cm

主.sml
structure Main =
struct
open Fn (* sml-extras's Fn *)
end

该解决方案基于 CM 手册第 4 节中描述的集合演算以及附录 A 中的 EBNF 语法。

另一种解决方案是更改 sml-extras 以重新导出整个 $/basis.cm ,同时遮蔽冲突的符号。但是,出于模块化的考虑,我决定采用上面详述的解决方案。

关于sml - 解决 SML/NJ 编译管理器中的库冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34723167/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com