在编写应用程序时,我希望在数据类型声明的withtype子句中定义多个类型。下面的代码片段演示了它:
datatype ta = A
withtype tb = int
and tc = tbmlton无法编译此代码,尽管smlnj成功了。
$ mlton -stop o test.sml
Error: test.sml 3.15.
Undefined type tb.
compilation aborted: parseAndElaborate reported errors我用的是mlton-20100608和smlnj 110.71。
这是在mlton的窃听器吗?
我不知道如何在没有这类声明的情况下继续:一组相互递归的数据类型和类型。
这个想法来自安德鲁·阿佩尔在他的书“http://www.cs.princeton.edu/~appel/modern/ml/,第98页,文件absyn.sml”中为老虎语言提出的抽象语法树类型。
发布于 2012-10-23 11:56:18
据mlton社区的Andreas说,这不是带有mlton的bug,而是SML/NJ方面(已知的)偏离标准。根据规范,withtype后面的缩写类型是,而不是彼此之间的递归,只有前面的数据类型。该示例被重写为
datatype ta = A
type tb = int
and tc = tb也就是说,MLton标记这一点是正确的。
一个可以在右边扩展另一个类型的构造函数,所以这不是真正的限制。但是,必须这样做可能会带来很大的麻烦。
https://stackoverflow.com/questions/13001197
复制相似问题