什么是描述方括号包围的多态变体的类型?

What is a type that describes polymorphic variants surrounded by square brackets?

我有以下代码:

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 ]

我想知道为什么标签周围有方括号

您必须向语言设计者询问任何类型的明确答案,但我想到了一些注意事项:

  1. 多态变体是结构性的,这意味着类型定义可以出现在类型注释中,而不仅仅是类型声明中,因此必须与可能出现在那里的所有其他元素不同并包含在内。

  2. 多态变体是子类型多态(因此得名),这意味着它们可以与“更大”或“更小”的类型统一,因此可以用 >< 表示。

  3. 其他类型的括号已在类型定义中用于其他目的。圆括号用于分组,大括号用于记录,尖括号用于对象。所以方括号似乎是减少重载的好选择。

我相信还有很多其他的考虑因素,但我认为只有这三个是使用方括号的好例子。

What is a type that describes polymorphic variants surrounded by square brackets?

一个多态变体类型。我们将多态变体类型定义为,

[ `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.