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

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

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