QueΛ投影算子的类型是什么?

时间:2016-02-04 16:10:16

标签: types functional-programming operators ocaml

在Suzuki,Kiselyov和Kameyama最近的论文Finally, Safely-Extensible and Efficient Language-Integrated Query中,他们给出了一个嵌入在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

本文后面使用的投影操作符(%.)将在标记为缩写的部分中剪切。文字说:

  

我们对[bag union]使用符号@%,使用=%进行相等性测试,使用%.   投影,为简洁而省略其打字。请参阅我们的代码了解更多   的信息。

我尽职尽责地看了the code,但%.的宣言无处可见。

%.的正确类型是什么?它是从代码的最终版本中删除的吗?如果是这样,是什么取而代之?

1 个答案:

答案 0 :(得分:3)

我认为,它在quel_sql.ml

val ( %. ) : ('a -> 'b term) -> string -> 'a -> 'c term

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