    import ceylon.language.meta.model { Class }

    /*
     * Do we really need to enforce that you can't
     * ask for the annotations of a certain type for a
     * certain program element unless the annotation
     * type can appear at that program element? Why not
     * just return no annotations?
     *
     */

    "The annotations of the [[given type|annotationType]]
     applied to the [[given program element|programElement]].
     For example:

         // Does the process declaration have any annotations
         // of type SharedAnnotation?
         value isShared = annotations(`SharedAnnotation`, `value process`) exists;

     The annotations may be returned in any order."
    shared native Values annotations<Value, Values, in ProgramElement>(
        Class<ConstrainedAnnotation<Value,Values,ProgramElement>> annotationType,
        ProgramElement programElement)
            given Value satisfies ConstrainedAnnotation<Value,Values,ProgramElement>
            //given Values of <Value?> | <Value[]>
            given ProgramElement satisfies Annotated;