Syntax OCaml';a型。t`语法
我刚刚在中遇到了以下代码片段: 在utop中进行评估后,具有以下特征:Syntax OCaml';a型。t`语法,syntax,ocaml,gadt,locally-abstract-type,Syntax,Ocaml,Gadt,Locally Abstract Type,我刚刚在中遇到了以下代码片段: 在utop中进行评估后,具有以下特征: val eval : 'a term -> 'a = <fun> 那么这个符号是什么呢?是什么使它不同于't 它是针对GADT的吗?该手册在以下几节中解释了语法: 简而言之,a型表示本地抽象类型a必须是多态的。不,它不是多态的。这就是'a用于(参见手册中的7.12)。类型系统不会考虑让f(x:a):‘a= x+1 < /代码>一个错误,因为 int >代码>可以统一。typea所做的是创建一个本地抽象类型
val eval : 'a term -> 'a = <fun>
那么这个符号是什么呢?是什么使它不同于't
它是针对GADT的吗?该手册在以下几节中解释了语法:
简而言之,
a型
表示本地抽象类型a
必须是多态的。不,它不是多态的。这就是'a代码>用于(参见手册中的7.12)。类型系统不会考虑<代码>让f(x:a):‘a= x+1 < /代码>一个错误,因为<代码> int >代码>可以统一。typea
所做的是创建一个本地抽象类型。在GADTs中,每个分支可以有一个不同的类型实例化为a
,如Antoine
示例所示。在希望在多态函数中使用具体类型的情况下,这允许引用该类型。@nlucaronitypea
强制要求a
具有多态性。它是'a代码>(强制多态性)和(类型a)
(声明本地抽象类型)。
val eval : 'a term -> 'a = <fun>
...
| Add -> (fun x y -> x + y)
...
Error: This pattern matches values of type (int -> int -> int) term
but a pattern was expected which matches values of type int term
Type int -> int -> int is not compatible with type int