/// <summary>
        /// Creates a new extension function definition.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="minArgs"></param>
        /// <param name="maxArgs"></param>
        /// <param name="argTypes"></param>
        /// <param name="returnType"></param>
        /// <param name="fn"></param>
        public TriflesXPathExtensionFunction(XName name, int minArgs, int maxArgs, XPathResultType[] argTypes, XPathResultType returnType, TriflesXPathInvokable fn)
        {
            FunctionName = Checker.NotNull(name, "name");

            Minargs = minArgs;
            Maxargs = maxArgs;

            if (Minargs < 0)
            {
                throw new ArgumentOutOfRangeException("minArgs");
            }
            else if (Maxargs < Minargs)
            {
                throw new ArgumentOutOfRangeException("maxArgs", "maxArgs cannot be less than minArgs");
            }

            if (argTypes == null)
            {
                argTypes = new XPathResultType[0];
            }

            this.argTypes = argTypes.ToImmutableArray();

            ReturnType = Checker.NotNull(returnType, "returnType");

            invokable = Checker.NotNull(fn, "fn");
        }
        /// <summary>
        /// Creates a new extension function definition.
        /// </summary>
        /// <param name="name"></param>
        /// <param name="minArgs"></param>
        /// <param name="maxArgs"></param>
        /// <param name="argTypes"></param>
        /// <param name="returnType"></param>
        /// <param name="fn"></param>
        public TriflesXPathExtensionFunction(XName name, int minArgs, int maxArgs, XPathResultType[] argTypes, XPathResultType returnType, TriflesXPathInvokable fn)
        {
            FunctionName = Checker.NotNull(name, "name");

            Minargs = minArgs;
            Maxargs = maxArgs;

            if (Minargs < 0)
            {
                throw new ArgumentOutOfRangeException("minArgs");
            }
            else if (Maxargs < Minargs)
            {
                throw new ArgumentOutOfRangeException("maxArgs", "maxArgs cannot be less than minArgs");
            }

            if (argTypes == null)
            {
                argTypes = new XPathResultType[0];
            }

            this.argTypes = argTypes.ToImmutableArray();

            ReturnType = Checker.NotNull(returnType, "returnType");

            invokable = Checker.NotNull(fn, "fn");
        }