import java.util.Set;

class Test {

  public static void test(Set foo, Matcher<Iterable<String>> matcher) {
    assertThat(<error descr="'assertThat(Test.Matcher<? super java.util.Set>, java.util.Set)' in 'Test' cannot be applied to '(Test.Matcher<java.lang.Iterable<java.lang.String>>, java.util.Set)'">matcher</error>, foo);

    Matcher<Iterable<String>> b = null;
    Matcher<? super Set> a = <error descr="Incompatible types. Found: 'Test.Matcher<java.lang.Iterable<java.lang.String>>', required: 'Test.Matcher<? super java.util.Set>'">b</error>;
  }

  public static <T> void assertThat(Matcher<? super T> matcher, T actual) {}
  
  static class Matcher<K> {}
}
