归纳类型:语法错误OCAML

时间:2018-02-23 16:37:14

标签: ocaml

我正在尝试创建一个名为option的新归纳类型:

type 'a option = None|Some of 'a
type 'a option tree = Leaf of 'a option | Fork of 'a * 'a tree * 'a tree

我遇到语法错误。 那是为什么?

1 个答案:

答案 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机制(我一直没有意识到)实现。