Reads a table's rows through its declared columns, so consumer code names
fields instead of casting them. The columns need literal names and types for
inference (as const, or the output of emitTableTypes); a widened
MwlTableColumn[] (such as contentCatalog returns) yields a loose row.
The cast is sound because coerceTableValue and MWL_TABLE validation own
the values - this only names what they already guarantee.
Reads a table's rows through its declared columns, so consumer code names fields instead of casting them. The columns need literal names and types for inference (
as const, or the output ofemitTableTypes); a widenedMwlTableColumn[](such ascontentCatalogreturns) yields a loose row. The cast is sound becausecoerceTableValueandMWL_TABLEvalidation own the values - this only names what they already guarantee.