module type Event = sig type t val update: t -> State.t -> State.t end type event = E : 'a * (module Event with type t = 'a) -> event (** Simple helper for the main event loop *) val run : ?eq:(State.t -> State.t -> bool) -> State.t -> event Note.E.t -> State.t Note.S.t val ev : (module Event with type t = 's) -> 's -> event