Actually this won't really work for a sodium impl with Stream/Cells that accumulate state with a combination of switch, you'd still need the user to tell sodium which sodium objects are referenced in the lambda.
Still a nice trick they do, and it is perfectly suitable for MobX, Vue.js, SolidJS, etc. Because the user interface itself forms a DAG and does not need cyclic references to the reactive objects. All reactivity goes down, and events go up to update state; the events being just pain events, nothing special.