TState IReducer <TState> .Reduce(TState currentState, IAction actionContext)
        {
            TSectionType current = m_getValue(currentState);

            TSectionType after = m_sectionReducer.Reduce(current, actionContext);

            if (!ReferenceEquals(current, after))
            {
                TState copyState = (TState)ReflectionUtility.CopyInstance(typeof(TState), currentState);
                m_setValue(copyState, after);
                return(copyState);
            }

            return(currentState);
        }