internal SingleTypeDeclaration(
            DeclarationKind kind,
            string name,
            int arity,
            DeclarationModifiers modifiers,
            TypeDeclarationFlags declFlags,
            SyntaxReference syntaxReference,
            SourceLocation nameLocation,
            ImmutableHashSet <string> memberNames,
            ImmutableArray <SingleTypeDeclaration> children,
            ImmutableArray <Diagnostic> diagnostics
            ) : base(name, syntaxReference, nameLocation, diagnostics)
        {
            Debug.Assert(kind != DeclarationKind.Namespace);

            _kind       = kind;
            _arity      = (ushort)arity;
            _modifiers  = modifiers;
            MemberNames = memberNames;
            _children   = children;
            _flags      = declFlags;
        }
        internal SingleTypeDeclaration(
            DeclarationKind kind,
            string name,
            int arity,
            DeclarationModifiers modifiers,
            TypeDeclarationFlags declFlags,
            SyntaxReference syntaxReference,
            SourceLocation nameLocation,
            ICollection <string> memberNames,
            ImmutableArray <SingleTypeDeclaration> children)
            : base(name,
                   syntaxReference,
                   nameLocation)
        {
            Debug.Assert(kind != DeclarationKind.Namespace);

            this.kind        = kind;
            this.arity       = (ushort)arity;
            this.modifiers   = modifiers;
            this.memberNames = memberNames;
            this.children    = children;
            this.flags       = declFlags;
        }