【发布时间】:2016-05-14 08:32:53
【问题描述】:
在 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,但是%.的声明却不见了。
%. 的正确类型是什么?它是否从代码的最终版本中删除?如果是,是什么取代了它?
【问题讨论】:
标签: types functional-programming operators ocaml