Проблема в том, что Int => T
также является типом. Например, скажем, вы определили только второй beta
:
def beta[ T ]( thunk: => T ) : String = thunk.toString
А теперь вы передаете ей функцию Int => Int
:
scala> beta((_: Int) + 1)
res0: String = <function1>
Итак, учитывая, что функция соответствует => T
, и что у вас также есть Int => T
, как Scala должна знать, какую именно вы хотите? Это может быть String
, например:
scala> beta((_: String) + 11)
res1: String = <function1>
Как мог Скала предположить, что это был Int
? Примеры, которые вы показали, чтобы продемонстрировать перегрузку, не виноваты, не демонстрируют ничего подобного, потому что вы избавились от параметров типа в них.