首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在DAML选择中执行多个更新

在DAML选择中执行多个更新
EN

Stack Overflow用户
提问于 2019-09-23 14:36:26
回答 1查看 122关注 0票数 1

在DAML中,可以使用类似map的函数来迭代收缩列表,检索它们并对每个收缩执行选择吗?在DAML中,这似乎受到了限制,因为在执行选择时,所有内容都需要包装在单个更新中。

下面是我尝试过的一个例子(注意问题):

代码语言:javascript
复制
exerciseChoice: ContractId ContractB -> Update (ContractId ContractB)
exerciseChoice contractB = do (exercise contractB UpdateB with newText = "test")

template ContractA
  with
    party : Party
    contracts: [ContractId ContractB]
  where
    signatory party

    controller party can
      nonconsuming UpdateA : [Update (ContractId ContractB)]
        with newText : Text
        do  
          --   a <- create ContractB with party = party; text = newText
          --   a2 <- exerciseChoice a
          --   return [a2] #these lines work fine

          return map exerciseChoice contracts
          -- #this doesn't work due to DAML implicitly adding Update before return definition
          -- i.e. DAML expects type 'Update [Update (ContractId ContractB)]' based on this signature
          -- we need a function which converts something like: 
          -- '[Update (ContractId ContractB)] -> Update [ContractId ContractB]'

template ContractB
  with
    party : Party
    text: Text
  where
    signatory party

    controller party can
      UpdateB: ContractId ContractB
        with newText: Text
          do create this with text = newText

如果这个问题可以解决,您还能解释为什么在DAML中返回多个元组时,它们似乎隐式地从(Update (ContractId A), Update (ContractId B))转换为Update (ContractId A, ContractId B)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-23 14:51:38

函数map的类型为(a -> b) -> [a] -> [b],因此map exerciseChoice contracts的类型为[Update (ContractId ContractB)]。从概念上讲,将操作列表转换为单个操作很简单。结果操作是按顺序执行列表中的每个操作的操作。实际上,有一个函数可以做到这一点:sequence : (Applicative m) => [m a] -> m [a]Update是一种应用程序,因此您可以编写sequence (map exerciseChoice contracts)。然而,这是一个如此常见的任务,以至于有一个专门的函数mapA : (Applicative m) => (a -> m b) -> [a] -> m [b]

mapA exerciseChoice contracts应该可以做到这一点。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58056832

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档