"An annotation constrained to appear only on certain program elements, and only with certain values. This interface should not be satisfied directly. Instead either [[OptionalAnnotation]] or [[SequencedAnnotation]] should be satisfied." see(`interface Annotation`) shared interface ConstrainedAnnotation<out Value=Annotation, out Values=Anything, in ProgramElement=Nothing> of Value //Note: adding the following constraint would // make ConstrainedAnnotation a GADT, which // the language does not currently support //of OptionalAnnotation<Value,ProgramElement> | // SequencedAnnotation<Value,ProgramElement> satisfies Annotation given Value satisfies Annotation given ProgramElement satisfies Annotated { "Can this annotation can occur on the given program element?" shared Boolean occurs(Annotated programElement) => programElement is ProgramElement; }