yield

inline suspend fun <V : T> yield(value: V, typeName: String = typeOf<V>().toString())

Suspend until the next tick, reporting value as this step's result.

reified V reads the type at THIS call site, so a body yielding an Int, then a List<Int>, then a BlockPos reports each correctly — the scope's T would flatten all three to a common supertype and be wrong about every one. V : T is the only place T is constrained; without it T cannot be inferred at all. Unit prints nothing, so yield(Unit) stays the pure "resume me next tick" signal.

typeName is filled in at compile time by YieldTypeExtension, which spells MC the way the snippet did. The default is the same type read at runtime, where only the runtime namespace exists.