The way to make a parent: its types fixed once, by name (parent<{ state: State; event: Event }>()), then
its children declared with child (one) or each (by id), and the parent made with compose. Its messages
are its own and { _tag: <child>, message } for each child (with id for children by id); its commands
likewise. Fixing the types first is what lets get, set and the rest be typed without annotations, and
the parent's own commands, events, external messages and flags, which nothing it returns can reveal, be known.
The way to make a parent: its types fixed once, by name (
parent<{ state: State; event: Event }>()), then its children declared withchild(one) oreach(by id), and the parent made withcompose. Its messages are its own and{ _tag: <child>, message }for each child (withidfor children by id); its commands likewise. Fixing the types first is what letsget,setand the rest be typed without annotations, and the parent's own commands, events, external messages and flags, which nothing it returns can reveal, be known.