"""An annotation that may occur multiple times at a single 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 that the annotated element is particpating in"
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>
of Value
satisfies ConstrainedAnnotation<Value,Value[],ProgramElement>
given Value satisfies SequencedAnnotation<Value,ProgramElement>
given ProgramElement satisfies Annotated {}