Skip to content

lowering_cycle

A :lowering :produces graph cycles: following produces-edges leads back to a lowering form.

Staged lowering follows :produces edges: a form’s lowering hook emits forms whose heads are listed in :produces, and those forms may themselves be lowerable. The aggregate schema check builds this graph (nodes = lowering forms, edges = their :produces heads) and rejects any cycle, so staging is guaranteed to terminate before a single hook runs.

Break the cycle: a chain like a -> b -> a means following the produces declarations loops forever. Re-point one :produces edge at a terminal (non-lowering) form, or drop the :lowering on one of the forms in the loop.


Run sjon explain lowering_cycle to read this at a terminal, browse every code, or work through diagnostics-driven repair if you want the habit rather than the answer.