/// <inheritdoc/>
        protected override Provider VisitApply(ApplyProvider provider)
        {
            OnRecursionEntrance(provider);
            var left  = VisitCompilable(provider.Left);
            var right = VisitCompilable(provider.Right);

            OnRecursionExit(provider);
            if (left == provider.Left && right == provider.Right)
            {
                return(provider);
            }
            return(new ApplyProvider(provider.ApplyParameter, left, right, provider.IsInlined, provider.SequenceType, provider.ApplyType));
        }
 /// <summary>
 /// Visits <see cref="ApplyProvider"/>.
 /// </summary>
 /// <param name="provider">Apply provider.</param>
 protected abstract Provider VisitApply(ApplyProvider provider);