ADR-229: A Value Handed Over Inside an f"…" Hole Is Handed Over There

Status: Accepted Date: September 26, 2026 Answers: ADR-282’s a value put into a list by push, insert or m[k] = v written inside a hole, the last of #200 Refines: ADR-282 D14 and ADR-282 D5, which kept a position a hole puts a value into text of its own Related: ADR-309 (a hole is code)

1. Context

A hole is code, and every reader parses it again from the literal’s text: the checker, the emitter, the pass that decides text tiers. That pass hands a value into a mixed position by rewriting the program (value.into_either()), and a hole is not in the program as expressions, so it had nothing to rewrite. A position a hole put a value into therefore stayed text of its own, and that was not only a refusal in the hole: it refused the lines outside the hole that put a view into the same list or map.

for line in text.lines() { m[line] = line.len() }         // refused, because of
println(f"{m.insert(text.trim(), 1) ?? 0}")               // this hole

2. Decisions

D1 — The wrap is recorded by the hole’s text and applied where the hole is parsed.

The tier pass walks each hole with its text. Where a value inside it goes into a mixed position, it records the hole’s text, the value’s shape (the argument_shape the checker and the emitter already key their answers by), and the method it is handed over with: into_either, into_either_maybe, or one of the either_… adapters before a collect. literal_expressions, the one function a reader parses a hole with, and the emitter’s own hole writer apply those wraps as they parse. So every reader sees the same code, and the position can be mixed like any other.

D2 — Two values of one shape in one hole are the same value.

The shape is how a value is found again in a fresh parse. Two values written the same way in one hole are handed over alike, which is right exactly when they go to the same position and harmless otherwise: an EitherText goes where a String or a view could, since the checker reads it as text of its own (ADR-282 D15) and a view position then refuses, in this language’s words.

3. Where it does not reach

A template’s holes (html { … }, ADR-017), which reach the readers by another route. A position one of those puts a view into stays text of its own.

4. Consequences

What is left of the wall a hole made is ADR-282 D22’s rule for a published position, which is decided rather than unbuilt.

This site is open source. Improve this page.