The following code ``` trait TC[X] { def gen(r: Int): X } val gen: Int => Int = ??? val tc: TC[Int] = x => gen(x) ``` get rewritten to ``` trait TC[X] { def gen(r: Int): X } val gen: Int => Int = ??? val tc: TC[Int] = gen ``` That does not compile due to ``` Found: (gen : Int => Int) Required: TC[Int] ``` Seems like one might need semantic information to detect and fix this case, but I am not sure.