What taking an edge into the definition D, declared over Registry,
returns: its handle, whose origin is what can open the screen
(ScreenOpenedFrom) — never the handle the edge was taken from, so
the same screen reached along any path has the same type. Its back
returns the frame below it, typed as the union of the screens that can open
it (for an inner tab, the frame below the screen it replaced).
A tab keeps its own stack, and an edge into it always lands on the tab's
root: the runtime pops what the tab keeps above the root, as the app's tap on
the selected tab does (switchToTabDefinition), so the type is exactly the
root screen and the caller needs no is guard. A tab has nothing below its
root, so back is optional.
What taking an edge into the definition
D, declared overRegistry, returns: its handle, whose origin is what can open the screen (ScreenOpenedFrom) — never the handle the edge was taken from, so the same screen reached along any path has the same type. Itsbackreturns the frame below it, typed as the union of the screens that can open it (for an inner tab, the frame below the screen it replaced).A tab keeps its own stack, and an edge into it always lands on the tab's root: the runtime pops what the tab keeps above the root, as the app's tap on the selected tab does (
switchToTabDefinition), so the type is exactly the root screen and the caller needs noisguard. A tab has nothing below its root, sobackis optional.