"An open class or interface, with open type arguments.
For example, `List<T>` is an open interface type, with a type argument which is the
[[OpenTypeVariable]] `T`."
shared sealed interface OpenClassOrInterfaceType
of OpenClassType | OpenInterfaceType
satisfies OpenType {
"The class or interface declaration for this open type."
shared formal ClassOrInterfaceDeclaration declaration;
"The extended type of this open type."
shared formal OpenClassType? extendedType;
"The satisfied types of this open type."
shared formal OpenInterfaceType[] satisfiedTypes;
"The map of open type arguments."
shared formal Map<TypeParameter, OpenType> typeArguments;
"The list of open type arguments."
shared formal OpenType[] typeArgumentList;
"The map of type parameter declaration to open type arguments and use-site variance."
shared formal Map<TypeParameter, OpenTypeArgument> typeArgumentWithVariances;
"The list of open type arguments with use-site variance."
shared formal OpenTypeArgument[] typeArgumentWithVarianceList;
// FIXME: pretty sure we're missing an optional container type here
}