    "An annotation that may occur at most once at a given
     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,
                out Type=Anything>
            of Value
            satisfies ConstrainedAnnotation
                <Value,Value?,ProgramElement,Type>
            given Value satisfies OptionalAnnotation
                <Value,ProgramElement,Type>
            given ProgramElement satisfies Annotated {}