为什么数据库查询是使用箭头的好地方?

问题描述 投票:0回答:2

我正在读this,其中写道:

嗯,重点是箭头符号禁止一些符号允许的计算。特别是所有“箭头动作”必须是“静态”已知的。

它解释说:

静态已知”意味着如果我们有几行箭头符号

> --    y <- action1 -< x

> --    z <- action2 -< y

那么表达式 action2 就不能依赖于 x 或者任何绑定在箭头符号行左侧的东西。

据我了解,这种限制使得箭头变得有价值。

现在,我正在尝试学习 Opaleye,我注意到它使用箭头将事物组合在一起。

为什么 Opaleye 使用箭头?为什么箭头非常适合这项工作?数据库/查询的哪些方面使得此限制有用?

haskell arrow-abstraction opaleye
2个回答
4
投票

参数化数据库查询看起来像箭头:

  • 每个都有一个输入和一个输出
  • 他们作曲
  • 我们希望以不同于 Haskell 函数的方式对待它们

组合

(.)
(或
(<<<)
)看起来像 SQL 子查询。
(&&&)
看起来像 SQL 连接。

我相信“静态已知”限制与您可以合理地转换为 SQL 的内容相关。 一旦你允许

fmap
/
lmap
/
rmap
与任意 Haskell 函数,这是不可行的(至少没有 SQL 语言扩展和 GHC 编译器插件)。 不过我还没有弄清楚细节。

我不知道我们可以通过 Opaleye 工具手动管理多少翻译。


0
投票

在查询语言中组合聚合和单子绑定时,变量作用域存在困难。 我从未提出过特别令人满意的解释,但您可以查看我的 Reddit 历史帖子(已修复)关系记录问题了解一些详细信息。

© www.soinside.com 2019 - 2024. All rights reserved.