public static ExistsNode <T, TProperty> Exists <T, TProperty>(this RuntimeConfigurator configurator)
            where T : class
            where TProperty : class, IEnumerable
        {
            TokenValueFactory <T, TProperty> tokenValue = Conditional.Property <T, TProperty>();

            return(configurator.CreateNode(id => new ExistsNode <T, TProperty>(id, tokenValue)));
        }
        public static NotNullNode <T, TProperty> NotNull <T, TProperty>(this RuntimeConfigurator configurator)
            where T : class
            where TProperty : class
        {
            TokenValueFactory <T, TProperty> tokenValue = Conditional.Property <T, TProperty>();

            return(configurator.CreateNode(id => new NotNullNode <T, TProperty>(id, tokenValue)));
        }
        public static CompareNode <T, TProperty> Compare <T, TProperty>(this RuntimeConfigurator configurator,
                                                                        Comparator <TProperty, TProperty> comparator,
                                                                        Value <TProperty> value)
            where T : class
        {
            TokenValueFactory <T, TProperty> tokenValue = Conditional.Property <T, TProperty>();

            return(configurator.CreateNode(id => new CompareNode <T, TProperty>(id, tokenValue, comparator, value)));
        }
        public static EachNode <T, TProperty, TElement> Each <T, TProperty, TElement>(
            this RuntimeConfigurator configurator,
            Action <TProperty, Action <TElement, int> > elementMatch)
            where T : class
            where TProperty : class, IEnumerable
        {
            TokenValueFactory <T, TProperty> tokenValue = Conditional.Property <T, TProperty>();

            return(configurator.CreateNode(id => new EachNode <T, TProperty, TElement>(id, tokenValue, elementMatch)));
        }
        public static CompareNode <T, TProperty> LessThanOrEqual <T, TProperty>(this RuntimeConfigurator configurator,
                                                                                TProperty value)
            where T : class
            where TProperty : IComparable <TProperty>
        {
            Value <TProperty> rightValue = Conditional.Constant(value);
            TokenValueFactory <T, TProperty> tokenValue = Conditional.Property <T, TProperty>();

            var comparator = new LessThanOrEqualValueComparator <TProperty>();

            return(configurator.CreateNode(id => new CompareNode <T, TProperty>(id, tokenValue, comparator, rightValue)));
        }