我正在读这,上面写着:
重点是箭头表示法禁止做表示法允许的计算。特别是,所有“箭头动作”必须“静态地”已知“。
它还解释说:
静态已知“意味着如果我们有几行箭头符号
> -- y <- action1 -< x> -- z <- action2 -< y那么表达式action2就不能依赖x,或者任何绑定在箭头符号行左侧的东西。
据我所知,这一限制使箭值得。
现在,我试着学习Opaleye,我注意到它使用箭头将事物组合在一起。
为什么猫眼使用箭头?为什么箭头很适合这份工作?数据库/查询是如何使这个限制有用的?
发布于 2018-05-09 15:31:13
Paramaterized数据库查询看起来像箭头:
组合(.) (或(<<<))看起来像一个SQL子查询。(&&&)看起来像一个SQL。
我认为,“静态已知”限制与您可能合理地能够将其转换为SQL的内容有关。一旦允许具有任意Haskell函数的fmap / lmap / rmap,这是不可行的(至少没有SQL扩展和GHC编译器插件)。不过,我还没弄清楚细节。
我不知道有多少翻译,我们可以管理手工Opaleye工具。
发布于 2018-05-12 16:29:21
在查询语言中合并聚合和一元绑定时,在变量范围方面存在困难。我从来没有想出一个特别令人满意的解释,但您可以看到我的一篇历史的Reddit帖子和(固定)关系记录问题的一些细节。
https://stackoverflow.com/questions/50255304
复制相似问题