我正在尝试创建一个名为option的新归纳类型:
type 'a option = None|Some of 'a
type 'a option tree = Leaf of 'a option | Fork of 'a * 'a tree * 'a tree
我遇到语法错误。 那是为什么?
答案 0 :(得分:0)
我认为问题是
type `a option tree = ...
而不是
type `a tree = ...
其余的看起来很好。
编辑2:
语法太多了。至于语义,我不确定你想要实现什么。首先让我们回顾一下这种类型的作用。如上所述定义固定,类型int tree
的示例值将为
Fork (0, Leaf None, Leaf (Some 1))
类型int option tree
的示例值为
Fork (Some 0, Leaf None, Leaf (Some None))
Leaf (Some (Some 1))
观察option
案例中的双Leaf
。如果您将类型定义为
type 'a tree2 = Leaf of 'a | Fork of 'a * 'a tree2 * 'a tree2
(也就是删除右侧的option
)类型int tree2
会有值,例如
Fork (0, Leaf 1, Leaf 2)
并且类型int option tree2
将具有诸如
Fork (Some 0, Leaf None, Leaf (Some 1))
可能会或可能不会更接近您的意图。
您希望将参数化类型tree
限制为仅使用option
类型进行参数化。正如格伦斯在评论中指出的那样,这可以通过constraint
机制(我一直没有意识到)实现。