我有以下代码:
type 'a t =
[ `With_degree_bound of
'a Or_infinity.t Dlog_plonk_types.Poly_comm.With_degree_bound.t
| `Without_degree_bound of
'a Dlog_plonk_types.Poly_comm.Without_degree_bound.t ]
我想知道为什么在
标签周围有方括号用方括号括起来描述多态变异的类型是什么?
它是多态变体类型。我们将多态变体类型定义为,
[ `C1 | `C2 | ... ]
,可以在任何需要类型表达式的地方使用它,例如
let x : [`C1 | `C2] = `C1
或者定义类型别名
type c1or2 = [`C1 | `C2`]
在您的例子中,'a t
是一个非常冗长的类型表达式
type 'a t =
[ `With_degree_bound of
'a Or_infinity.t Dlog_plonk_types.Poly_comm.With_degree_bound.t
| `Without_degree_bound of
'a Dlog_plonk_types.Poly_comm.Without_degree_bound.t ]
,这样当你需要参考上述类型你可以使用'a t
。
您必须向语言设计者询问任何明确的答案,但有一些注意事项浮现在脑海中:
-
多态变体是结构化的,这意味着类型定义可以出现在类型注释中,而不仅仅是在类型声明中,因此必须与可能出现在类型注释中的所有其他元素不同并包含在其中。
-
多态变体是亚型多态的(因此得名),这意味着它们可以与"更大"的类型统一;或"更小",因此可以用
>
或<
注释来表示。 -
其他类型的括号已经在类型定义中用于其他目的。括号用于分组,花括号用于记录,尖括号用于对象。因此,方括号似乎是减少重载的一个好选择。
我相信还有很多其他的考虑因素,但我认为仅仅这三个因素就很好地说明了使用方括号的原因。