−All three versions return the same values, but users 2, 3, and 99 all appear as None, hiding which lookup stopped and why. Keeping the reason requires a context such as a result type and a decision about which failures to distinguish. Direct Bind calls nest lambdas so that the first user remains available at the end. Query syntax carries earlier range variables in anonymous objects, the specification's transparent identifiers, hiding that nesting while introducing objects between the stages. These are synchronous lookups in in-memory dictionaries; the example does not combine them with asynchronous queries.
+All three versions return the same values, but users 2, 3, and 99 all appear as None, hiding which lookup stopped and why. Keeping the reason requires a context such as a result type and a decision about which failures to distinguish. Direct Bind calls nest lambdas so that the first user remains available at the end. Query syntax carries earlier range variables through the intermediate steps where they are needed, which the specification describes with transparent identifiers. Anonymous objects are a common implementation, but the specification permits other mechanisms, so this does not imply one object allocation at every stage. These are synchronous lookups in in-memory dictionaries; the example does not combine them with asynchronous queries.