我正在阅读this,其中说:
嗯,重点是箭头符号禁止表示符号允许的一些计算。特别是所有“箭头动作”必须“静态地”知道“。
它解释说:
静态知名"意味着如果我们有几行箭头符号
currentLineNode.physicsBody = SKPhysicsBody(rectangleOf: currentLineNode.frame.size, center: CGPoint(x: startPoint.x + currentLineNode.frame.size.width / 2, y: startPoint.y + currentLineNode.frame.size.height / 2))
> -- y <- action1 -< x
然后表达式action2不能依赖于x或箭头符号行左侧绑定的任何东西。
据我了解,这种限制使箭头值得。
现在,我正在努力学习Opaleye,我注意到它使用箭头将各种东西组合在一起。
为什么Opaleye使用箭头?为什么箭头适合这项工作?使这种限制有用的数据库/查询是什么?
答案 0 :(得分:2)
参数化的数据库查询看起来像箭头:
组合(.)
(或(<<<)
)看起来像一个SQL子查询。 (&&&)
看起来像是SQL连接。
我相信&#34;静态知道&#34;限制涉及您可能合理地转换为SQL的内容。允许fmap
/ lmap
/ rmap
使用任意Haskell函数后,这是不可行的(至少没有SQL语言扩展和GHC编译器插件)。不过,我还没有弄清楚细节。
我不知道Opaleye手工管理的翻译有多少。
答案 1 :(得分:0)
在查询语言中组合聚合和monadic绑定时,变量范围存在困难。我从来没有想出过一个特别令人满意的解释,但你可以看到a historical Reddit post of mine和(fixed) issue with relational-record来了解一些细节。