"""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 {}