Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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
Types Que和x39B的类型是什么';s投影算子?_Types_Functional Programming_Operators_Ocaml - Fatal编程技术网

Types Que和x39B的类型是什么';s投影算子?

Types Que和x39B的类型是什么';s投影算子?,types,functional-programming,operators,ocaml,Types,Functional Programming,Operators,Ocaml,在Suzuki、Kiselyov和Kameyama最近的论文中,他们给出了一种嵌入OCaml中的类型安全、可扩展查询语言的规范,该语言可以转换为SQL 这是他们用于查询的代数,摘自论文 module type Symantics = sig type α repr (* representation type *) val int: int → int repr val bool: bool → bool repr val string: string → st

在Suzuki、Kiselyov和Kameyama最近的论文中,他们给出了一种嵌入OCaml中的类型安全、可扩展查询语言的规范,该语言可以转换为SQL

这是他们用于查询的代数,摘自论文

module type Symantics = sig
    type α repr (* representation type *)

    val int: int → int repr
    val bool: bool → bool repr
    val string: string → string repr

    val lam: (α repr → β repr) → (α→β) repr
    val app: (α → β) repr → α repr → β repr

    val foreach: (unit→ α list repr) →
                 (α repr → β list repr) →
                 β list repr
    val where: bool repr → (unit → α list repr) → α list repr
    val yield: α repr → α list repr
    val nil: unit → α list repr
    val (@%): α list repr → α list repr → α list repr (* bag union *)

    val (=%): α repr → α repr → bool repr

    ... (* abbreviated *)

    type α obs (* observation *)
    val observe: (unit → α repr) → α obs
end
投影操作符
(%)
(本文后面将使用)在标记为缩写的部分被剪断。案文说:

我们使用符号
@%
表示[行李联合],
=%
表示相等性测试,而
%表示
投影,为简洁起见,其键入被省略。更多信息,请参阅我们的代码
细节

我尽职尽责地看了看,但是
%.
的声明看不见了

正确的
%类型是什么。
?它是否已从代码的最终版本中删除?如果是的话,是什么取代了它?

我想,它在


该文件没有corresponent.mli,OCaml自己推断模块的签名。您可以将生成的cmo文件加载到顶层,使用ocamlbrowser或merlin获取此符号的签名。我做了第一个,并在这里复制粘贴了签名,因此它没有出现在来源中(您将找不到它)。

我认为这不是一个。它是一个实现,不是一个声明,它与@BenjaminHodgson相关联,您不需要在OCaml中声明值,因为语言总是可以推断类型。因此,有时人们不编写
mli
文件,允许编译器自己推断它们。因此没有明确的声明。
ivg
我在寻找
签名
——客户端将使用的接口,而不是SQL的实现。正如ivg所说,如果省略mli文件,OCaml自己生成签名。
val ( %. ) : ('a -> 'b term) -> string -> 'a -> 'c term