Jadpo is experimental and not ready for production. These docs follow the compiler's main branch as of 5 Nov 2026. What's built · Install 0.3.0
jadpo
ReferenceLogic

LanguageLogic

Loops

for item in items goes through a list, and the loop variable takes its type from the list.

example
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:

example
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}
jadpo checkcheck failed: 1 error, 1 file

error Map<Loaf, Stock> can't be looped over

--> main.jadpo:11:17

   |11 |     for loaf in stock {   |                 ^^^^^ this is `Map<Loaf, Stock>`
reason
for loops over a List or a Set; a map is walked through its keys, a Set<Loaf>, and each key's value read with map.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.