Это выглядит безобидно, если бесполезно для меня. Тип, который хочет x, не существует, поэтому вы не можете передать его методу. Полагаю, что безвредная бесполезность должна быть ошибкой времени компиляции - дело вкуса.
Если вы посмотрите на то, что на самом деле делает x, он декомпилируется следующим образом:
public java.lang.Object x(java.lang.Object);
Code:
0: aload_1
1: areturn
Это именно то, что должен делать метод идентификации (загрузить аргумент независимо от типа, вернуть его). Вы можете написать что-то эквивалентное с гораздо меньшим количеством кода:
trait AbstractType { type T }
class Useless extends AbstractType { def identity(t: AbstractType#T) = t }
За исключением того, что ничто не имеет типа AbstractType # T, поэтому мы снова имеем бесполезность.
Если я что-то упустил.