1 import Base 2 import ./trace_facts.bend as Facts 3 4 # Each staged command owns its payload once. Trusted raw callbacks stay opaque. 5 type Command is Type: 6 Raw{apply:W -> W} 7 Observed{apply:Facts.State -> W -> W & Facts.State} 8 def run(~W:Type,command:Command,world:W,trace:Facts.State) -> W & Facts.State: 9 match command: 10 case Raw{apply}:(apply(world),trace) 11 case Observed{apply}:apply(trace,world) 12 def world_only(~W:Type,result:W & Facts.State) -> W: 13 match result: 14 case (world,_):world 15 def run_disabled(~W:Type,command:Command,world:W) -> W: 16 world_only(~W,run(~W,command,world,Facts.Off{}))