static bool TypeMatches(FunctionDeclaration decl, NamedTypeSpec ts, SwiftProtocolListType protList, TypeMapper typeMap)
        {
            if (protList == null)
            {
                return(false);
            }
            if (protList.Protocols.Count == 1 && !ts.IsProtocolList)
            {
                return(TypeMatches(decl, ts, protList.Protocols [0], typeMap));
            }

            if (protList.Protocols.Count != ts.GenericParameters.Count || !ts.IsProtocolList)
            {
                return(false);
            }
            for (int i = 0; i < ts.GenericParameters.Count; i++)
            {
                if (!TypeMatches(decl, ts.GenericParameters [i], protList.Protocols [i], typeMap))
                {
                    return(false);
                }
            }
            return(true);
        }
 public SwiftExistentialMetaType(SwiftProtocolListType protocolList, bool isReference, SwiftName name = null)
     : base(CoreCompoundType.MetaClass, isReference, name)
 {
     Protocol = Ex.ThrowOnNull(protocolList, nameof(protocolList));
 }