Nice, looks very clean.<p>As in Elm, I’ve never fully understood why the events emit a value of some message type that gets interpreted into a function from ‘state -> state’ instead of handling with a state transformation directly.<p>Feels like boilerplate to me. I can see situations where this approach is useful, but should it be the default?<p>I guess you can always change your message type to ‘a -> a’ and interpret with ‘id’ if you want to.