    "An annotation that may occur at most once at a single program element and
     only on certain program elements.

     An optional annotation is declared simply by having the annotation class
     satisfy OptionalAnnotation instead of [[Annotation]]. For example
     the following would only be allowed on `class` declarations:

         final annotation class ExampleClass()
                 satisfies OptionalAnnotation<Example, ClassDeclaration> {}

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