Effect interpreter
Interpreter registers effect factories keyed by (state, event). Each factory returns a fresh Effect (effects are not Clone).
#![allow(unused)] fn main() { use id_effect::{Effect, run_blocking}; use id_effect_fsm::{Interpreter, StateMachine, TransitionTable}; let interp = Interpreter::new().on_transition("idle", "tick", || { Effect::new(|_| Ok(())) }); let mut m = StateMachine::new("idle", table); interp.run(&mut m, ["tick"], ())?; }
Use run_blocking at the application boundary — the same rule as other synchronous IO in effect! blocks.