"A type parameter declaration."
shared sealed interface TypeParameter satisfies Declaration {
    
    // FIXME: make it NestableDeclaration&GenericDeclaration?
    "The declaration that declared this type parameter. This is either a [[ClassOrInterfaceDeclaration]] or a
     [[FunctionDeclaration]]."
    shared formal NestableDeclaration container;
    
    "True if this type parameter has a default type argument and can be omitted."
    shared formal Boolean defaulted;
    
    "This type parameter's default type argument, if it has one."
    shared formal OpenType? defaultTypeArgument;
    
    "This type parameter's variance, as defined by `in` or `out` keywords."
    shared formal Variance variance;
    
    "The `satisfies` upper bounds for this type parameter."
    shared formal OpenType[] satisfiedTypes;

    "The `of` enumerated bounds for this type parameter."
    shared formal OpenType[] caseTypes;
}