【发布时间】:2014-06-27 00:18:43
【问题描述】:
我正在开发一个项目,其中包含很多如下所示的代码:
structure MyStruct = struct
datatype node
= A of Foo.t
| B
type t = node Wrap.t
fun layout myNode =
case node myNode of
A foo => Foo.bar foo
| B => "void"
end
Wrap 在别处定义,但重点是它有一个参数化类型,t。
node 在case node myNode of 行中做什么?它不是类型构造函数,因为 t 不是类型,因此将其更改为 case (node myNode) 会引发错误消息。此外,如果我编写如下所示的函数:
fun layout node myNode = ...
我收到一个类型错误,因为它的类型不是 MyStruct.t -> Layout.t,而是 'a -> MyStruct.node -> Layout.t。但是,如果我在 case 语句中做同样的事情,那就没问题了。
这是怎么回事?
【问题讨论】:
标签: types compiler-errors sml signature smlnj