我正在使用hasql库与PostgreSQL数据库进行交互,它使用Arrows进行查询和查询组合.
我有一个这种类型的简单查询:
setCustomerAttributes :: Query (TagData, UserDetails) ()
Run Code Online (Sandbox Code Playgroud)
Query箭头在哪里(TagData, UserDetails)输入并返回().
现在我想编写一个需要多个TagData输入的查询,并为所有这些查询运行此查询.基本上我想做这样的事情
setManyCustomerAttributes :: Query ([TagPair], Customer) ()
setManyCustomerAttributes = proc (pairs, customer) -> do
returnA -< traverse_ (\pair -> setCustomerAttribute -< (pair, customer)) pairs
Run Code Online (Sandbox Code Playgroud)
然而,这当然会产生错误Arrow command found where expression was expected,因为你不能只混合和匹配箭头符号和正则表达式.
箭头相当于做那样的遍历?
你需要一些比Arrow你更强大的东西- 你需要的东西ArrowChoice.值得庆幸的是,这Query也是一个例子.你可以做一些有用的东西
setManyCustomerAttributes :: Query ([TagData], UserDetails) ()
setManyCustomerAttributes = proc (pairs,customer) ->
case pairs of
[] -> returnA -< ()
(p:ps) -> do
setCustomerAttributes -< (p,customer)
setManyCustomerAttributes -< (ps,customer)
Run Code Online (Sandbox Code Playgroud)
我还在考虑是否有一些类似于traverse值得概括的有趣抽象.
如果有一个Arrow等价物,Traversing可能是一般化的抽象.
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |