在Suzuki、Kiselyov和Kameyama最近的论文“http://okmij.org/ftp/meta-programming/quel.pdf”中,他们给出了一种嵌入在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本文后面使用的投影运算符(%.)在标有缩写的一节中被剪短。案文说:
我们使用符号
@%表示包合并,=%表示相等测试,%.表示投影,其类型由于简洁而被省略。有关更多细节,请参见我们的代码。
我尽职尽责地看了代码,但是%.的声明却无处可见。
正确的%.类型是什么?它是从代码的最终版本中删除的吗?如果是的话,是什么取代了它?
发布于 2016-02-04 16:32:42
我想,是在sql.ml里
val ( %. ) : ('a -> 'b term) -> string -> 'a -> 'c term该文件没有相应的.mli和OCaml自己演绎模块的签名。您可以将生成的cmo文件加载到toplevel,使用ocamlbrowser或merlin获取此符号的含义。我做了第一个,复制了这里的含义,所以它不存在于源中(您将找不到)。
https://stackoverflow.com/questions/35205954
复制相似问题