public static StateConfiguration <TState, TTrigger> Permit <TState, TTrigger>(
            this StateConfiguration <TState, TTrigger> config, TTrigger trigger, TState resultingState,
            Action onTriggerAction)
        {
            Contract.NotNull(onTriggerAction != null, nameof(onTriggerAction));

            return(config.Permit(trigger, resultingState,
                                 t => onTriggerAction()));
        }
        public static StateConfiguration <TState, TTrigger> Permit <TState, TTrigger, TArgument>(this
                                                                                                 StateConfiguration <TState, TTrigger> config, ParameterizedTrigger <TTrigger, TArgument> trigger,
                                                                                                 TState resultingState,
                                                                                                 Action <TArgument> onTriggerAction)
        {
            Contract.NotNull(onTriggerAction != null, nameof(onTriggerAction));

            return(config.Permit(trigger, resultingState,
                                 (t, a) => onTriggerAction
                                     (a)));
        }