Loops
for item in items goes through a list, and the loop variable takes its
type from the list.
function stock_total(lines: List<OrderLine>) -> Stock { var mut total: Stock = 0 for line in lines { total = Stock(total + line.needed) } return total}
for is the only loop. There is no while, break or continue, and
return is allowed inside the body.
for also goes through a set, in its canonical order, one fixed order that is
the same on every target (Collections). It
goes through a map's keys with for loaf in map.keys(stock)
(Maps). A map itself can't be looped over,
since each step would need a key and a value together. The error's edit
writes map.keys:
type Loaf = Text { min_length: 1}type Stock = Int { min: 0}function loaves(stock: Map<Loaf, Stock>) -> List<Loaf> { var mut out: List<Loaf> = [] for loaf in stock { out = list.append(out, loaf) } return out}
error Map<Loaf, Stock> can't be looped over
--> main.jadpo:11:17
|11 | for loaf in stock { | ^^^^^ this is `Map<Loaf, Stock>`
- reason
forloops over aListor aSet; a map is walked through its keys, aSet<Loaf>, and each key's value read withmap.get.- next
- Loop over
map.keys(stock)(agent) - rule
- type.
mismatch - help
- https://jadpo.
dev/docs/errors/type. mismatch
No outside calls inside a loop
An outside call is one that leaves your app: a provider operation (an
outside service, reached through its package;
External services), a package action, a file store's
put or read, or a documents render. Inside a loop's body, any of
these is a compile error, in any action. A query inside a loop already is
(Reading in a loop).
To make a call for each item, use batches.each, the one way
(Batches).
A provider that takes a list is called once, with the list.
Keeping calls out of loops means the steps of an action that makes several changing calls lie along a path whose length the compiler knows (Several changing calls in one action).
The error is effect.call_in_loop, at
the call. It covers any outside call, one that only reads included, made
in a loop's body or by an action called there, in an action or a fixture.
Markdown for agents: /docs/loops.md.Built from Jadpo main at aee2e8f.