    """An annotation that may occur multiple times at a given
       program element, and only on certain program elemenets.

       A sequenced annotation is declared simply by having the
       annotation class satisfy `SequencedAnnotation` instead of
       [[Annotation]]. For example the following would only be
       allowed on `class` declarations, functions or methods:

           alias ExecutableDeclaration
                  => ClassOrInterfaceDeclaration|FunctionDeclaration;
           "Documents a pattern in which the annotated element
            particpates."
           shared final annotation class Pattern(String name)
                   satisfies SequencedAnnotation<Pattern, ExecutableDeclaration> {}

       At runtime a [[ceylon.language.meta.declaration::Declaration]]
       instance can be queried for its `SequencedAnnotation`s of
       a certain type using [[ceylon.language.meta::annotations]]
       or [[ceylon.language.meta::sequencedAnnotations]]."""
    see(`interface Annotation`)
    shared interface SequencedAnnotation<out Value,
                in ProgramElement=Annotated,
                out Type=Anything>
            of Value
            satisfies ConstrainedAnnotation
                <Value,Value[],ProgramElement,Type>
            given Value satisfies SequencedAnnotation
                <Value,ProgramElement,Type>
            given ProgramElement satisfies Annotated {}