class StateMachine {

    public S currentState() {
        return currentState;
    }

    private  StateMachine(S initialState, Map<Key<S>, Function<Object, S>> transitions,
            BiFunction<S, Object, S> inappropriateEventHandler, StateChangeListener<S> stateChangeListener);

}