3

我想将签名/结构对放在结构中,如下所示:

structure Outer :> OUTER =
struct
    signature INNER =
    sig
        ...
    end

    structure Inner :> INNER =
    struct
    ...
    end
end

但即使是最简单的示例也会产生错误:

../test.sml:1.18-2.6 错误:语法错误:用 EQUALOP 替换 STRUCT
../test.sml:5.6 错误:END 处发现语法错误

似乎在结构内不允许签名。实现此功能的最佳方法是什么?

4

2 回答 2

3

尽管结构嵌套在 SML 中,但签名不会。目前尚不清楚您要实现什么功能:

  • 隐藏命名签名是不可能的。

  • 使INNER签名依赖于结构中声明的类型Outer是通过纤维化where type子句)实现的。Harper 和 Pierce 在 Benjamin Pierce 关于编程语言中的高级类型的书中有一个关于纤维化的长度部分。

于 2010-01-28T23:22:35.740 回答
2

您还可以内联内部签名,如

structure Outer :> OUTER =
struct
    structure Inner :> sig
      ...
    end
      =
    struct
    ...
    end
end
于 2020-10-12T19:54:36.853 回答