Не очень понятно зачем, если можно эмулировать интерфейсом.
Не проще будет добавить синтаксис, чтобы можно было перегрузить операцию применения аргумента к чему-то и использовать тогда такие интерфейсы.
Типа как в скале:
trait ~>[F[_], G[_]] {
def apply[T](f: F[T]): G[T]
}
object identity extends (Id ~> Id) {
def apply[T](t : T) = t
}
identity(123)
Кстати, в интерфейсе-то как раз можно ввести новую переменную