Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Syntax OCaml';a型。t`语法_Syntax_Ocaml_Gadt_Locally Abstract Type - Fatal编程技术网

Syntax OCaml';a型。t`语法

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所做的是创建一个本地抽象类型

我刚刚在中遇到了以下代码片段:

在utop中进行评估后,具有以下特征:

val eval : 'a term -> 'a = <fun>
那么这个符号是什么呢?是什么使它不同于
't


它是针对GADT的吗?

该手册在以下几节中解释了语法:


简而言之,
a型
表示本地抽象类型
a
必须是多态的。

不,它不是多态的。这就是
'a用于(参见手册中的7.12)。类型系统不会考虑<代码>让f(x:a):‘a= x+1 < /代码>一个错误,因为<代码> int >代码>可以统一。
typea
所做的是创建一个本地抽象类型。在GADTs中,每个分支可以有一个不同的类型实例化为
a
,如
Antoine
示例所示。在希望在多态函数中使用具体类型的情况下,这允许引用该类型。@nlucaroni
typea
强制要求
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