什么是描述方括号包围的多态变体的类型?
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 ]
我想知道为什么标签周围有方括号
您必须向语言设计者询问任何类型的明确答案,但我想到了一些注意事项:
多态变体是结构性的,这意味着类型定义可以出现在类型注释中,而不仅仅是类型声明中,因此必须与可能出现在那里的所有其他元素不同并包含在内。
多态变体是子类型多态(因此得名),这意味着它们可以与“更大”或“更小”的类型统一,因此可以用 >
或 <
表示。
其他类型的括号已在类型定义中用于其他目的。圆括号用于分组,大括号用于记录,尖括号用于对象。所以方括号似乎是减少重载的好选择。
我相信还有很多其他的考虑因素,但我认为只有这三个是使用方括号的好例子。
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
.
我有以下代码:
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 ]
我想知道为什么标签周围有方括号
您必须向语言设计者询问任何类型的明确答案,但我想到了一些注意事项:
多态变体是结构性的,这意味着类型定义可以出现在类型注释中,而不仅仅是类型声明中,因此必须与可能出现在那里的所有其他元素不同并包含在内。
多态变体是子类型多态(因此得名),这意味着它们可以与“更大”或“更小”的类型统一,因此可以用
>
或<
表示。其他类型的括号已在类型定义中用于其他目的。圆括号用于分组,大括号用于记录,尖括号用于对象。所以方括号似乎是减少重载的好选择。
我相信还有很多其他的考虑因素,但我认为只有这三个是使用方括号的好例子。
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
.