object Test {
trait NT[X]
trait W[W, A] extends NT[Int]
type StringW[T] = W[String, T]
trait K[M[_], A, B]
def k[M[_], B](f: Int => M[B]): K[M, Int, B] = null
val okay1: K[StringW,Int,Int] = k{ (y: Int) => null: StringW[Int] }
val okay2 = k[StringW,Int]{ (y: Int) => null: W[String, Int] }
val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] }
// remove `extends NT[Int]`, and the last line gives an inference error
// rather than a crash.
// test/files/pos/t5683.scala:12: error: no type parameters for method k: (f: Int => M[B])Test.K[M,Int,B] exist so that it can be applied to arguments (Int => Test.W[String,Int])
// --- because ---
// argument expression's type is not compatible with formal parameter type;
// found : Int => Test.W[String,Int]
// required: Int => ?M[?B]
// val crash: K[StringW,Int,Int] = k{ (y: Int) => null: W[String, Int] }
// ^
}