    import ceylon.language.meta.declaration {
        TypeParameter
    }
    import ceylon.language.meta.model {
        ClosedType = Type
    }

    "A generic model which has closed type arguments."
    shared sealed interface Generic {
        "The map of type parameter declaration to type arguments for this generic model."
        shared formal Map<TypeParameter, ClosedType<>> typeArguments;
        "The list of type arguments for this generic model."
        shared formal ClosedType<>[] typeArgumentList;

        "The map of type parameter declaration to type arguments and use-site variance for this generic model."
        shared formal Map<TypeParameter, TypeArgument> typeArgumentWithVariances;
        "The list of type arguments for this generic model."
        shared formal TypeArgument[] typeArgumentWithVarianceList;
    }