State type — must implement equals (data class or primitive recommended).
Event type — sealed class / interface recommended.