TLDR
Чтобы применить операцию бухгалтерской книги N
раз, проще всего использовать функцию replicateA
из DA.Action
.
Пример
daml 1.2
module ReplicateDaml
where
import DA.Action
template Demo
with
sig: Party
total: Int
where
signatory sig
testReplicate = scenario do
p <- getParty "party"
let
total = 10
p `submit` replicateA total $ create Demo with sig=p; total
Обсуждение
Сигнатура типа для replicateA
:
-- | `replicateA n act` performs the action n times, gathering the results.
replicateA : (Applicative m) => Int -> m a -> m [a]
Вы можете прочитать это как:
Эта функция поддерживает любой тип m
, который имеет экземпляр (реализацию) для класса типов Applicative
(API или интерфейс).Его первый параметр - Int
Второй - это «эффект» типа m
, который предоставляет значение типа a
. Он возвращает результат повторения эффекта N раз, собирая результаты в список
Тип create
, который вы описываете, имеет тип: Update (ContractId a)
;и как Update
создает (имеет реализацию) класс типов Applicative
, вы можете использовать любую функцию, которая работает с Applicative
на Update
- которая, естественно, включает replicateA
.
При использовании этого способа замените Update
на m
и (ContractId t)
на a
в сигнатуре типа, так:
replicateA : Int -> Update (ContractId t) -> Update [ContractId t]