Last statement in a do block must be an expression?
Mod note: As of SDK 1.5.0 Scenarios have been superseded by the more powerful Daml Script. We now recommend using that for all purposes. For more information, and to learn how to use Script please check out @Andreas’ post on our blog.
I am hitting a snag in the scenario. I hope you can help pinpoint the problem
example = scenario do alice <- getParty "Alice" bob <- getParty "Bob" let citizenkey = CitizenKey with citizen = alice ; id = "1" let citizeninfo = CitizenInfo with citizendetail1 = "Text1" ; citizendetail2 ="Text2" ; citizendetail3 = "Text3" submit alice do create CitizenRegistration with registrationCid = citizenkey; registrationData = citizeninfo let citizenkey = CitizenKey with citizen = bob ; id = "2" let citizeninfo = CitizenInfo with citizendetail1 = "Text1" ; citizendetail2 ="Text2" ; citizendetail3 = "Text3" bobregistration <- submit bob do create CitizenRegistration with registrationCid = citizenkey; registrationData = citizeninfo
I trying to understand the correct format for
bobregistration <- submit bob do create CitizenRegistration with registrationCid = citizenkey; registrationData = citizeninfo
It gives me the following error
error: The last statement in a 'do' block must be an expression bobregistration <- submit bob do create CitizenRegistration {registrationCid = citizenkey, registrationData = citizeninfo}typecheck
Hey @bartcant. It looks to me like you need a return statement at the end of your scenario. Without a return statement, you won’t be able to return the result for both Alice and Bob’s registration.
example = scenario do
alice <- getParty "Alice"
bob <- getParty "Bob"
let citizenkey = CitizenKey with citizen = alice ; id = "1"
let citizeninfo = CitizenInfo with citizendetail1 = "Text1" ; citizendetail2 ="Text2" ; citizendetail3 = "Text3"
aliceRegistration <- submit alice do create CitizenRegistration with registrationCid = citizenkey; registrationData = citizeninfo
let citizenkey = CitizenKey with citizen = bob ; id = "2"
let citizeninfo = CitizenInfo with citizendetail1 = "Text1" ; citizendetail2 ="Text2" ; citizendetail3 = "Text3"
bobRegistration <- submit bob do create CitizenRegistration with registrationCid = citizenkey; registrationData = citizeninfo
return(aliceRegistration, bobRegistration)That’s right. It looks like formatting of the do in
bobregistration <- submit bob do
is fine but the compiler is complaining about the top level scenario:
example = scenario do
As @jamesljaworski85 pointed out, the last statement of a do can’t be a <- (or let) binding. However it could be something other than return if it has the right type, e.g. a create.