haskell - 为什么数据库查询是使用箭头的好地方?
问题描述
我正在读这个,它说:
好吧,关键是箭头符号禁止了一些符号允许的计算。特别是所有“箭头动作”必须是“静态”已知的。
它解释了:
静态已知”意味着如果我们有几行箭头符号
> -- y <- action1 -< x
> -- z <- action2 -< y
那么表达式 action2 不能依赖于 x 或实际上绑定在箭头符号行左侧的任何东西。
据我了解,这种限制使箭头值得。
现在,我正在尝试学习 Opaleye,我注意到它使用箭头将事物组合在一起。
为什么 Opaleye 使用箭头?为什么箭头非常适合这项工作?使此限制有用的数据库/查询是什么?
解决方案
参数化的数据库查询看起来像箭头:
- 每个都有一个输入和一个输出
- 他们组成
- 我们希望以不同于 Haskell 函数的方式对待它们
组合(.)
(或(<<<)
)看起来像一个 SQL 子查询。 (&&&)
看起来像一个 SQL 连接。
我相信“静态已知”的限制与您可以合理地翻译成 SQL 的东西有关。一旦您允许fmap
//使用任意 Haskell 函数lmap
,rmap
这是不可行的(至少没有 SQL 语言扩展和 GHC 编译器插件)。不过,我还没有弄清楚细节。
我不知道我们可以通过 Opaleye 实现手动管理多少翻译。
推荐阅读
- amazon-web-services - 我们能否创建一个具有足够权限的新用户来连接不需要使用 PEM 连接到 RDP/SSH 的 AWS 机器?
- azure - 是否允许使用 AD Connect 同步 Azure AD 免费帐户的自助服务密码更改?
- c# - 如何在 Azure 管道中模拟 Visual Studios 发布
- regex - 如何仅使用公式在 Excel 或 Google 表格中的 2 个不同字符之间获取电子邮件地址?
- macos - 全新安装后 Chrome 无法在 OSX 上启动
- java - Vaadin 为网格中的选定行设置背景颜色
- sql-server - Powershell SMO SQL Server 还原问题
- php - 选择具有会话 ID 和正确语法的 php 函数时出错
- c++ - c++ 文字数组表示法
- python - 执行 python 项目中的脚本时,如何向 $PYTHONPATH 或 $PATH 变量添加路径?