event() :: any
state() :: any
render(state, last_rendered_state :: state) :: any
update(state, event) :: state